<!--
-File         $Id: AppendixC-OptionalTasks.html 1397 2011-12-27 14:33:17Z mrook $
-License      GNU FDL (http://www.gnu.org/copyleft/fdl.html)
-Copyright    2002, turing
-Author       alex black, enigma@turingstudio.com
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Phing Guide - Optional Tasks</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="Stylesheet" rev="Stylesheet"
	href="../../css/Documentation.css" type="text/css" media="All"
	charset="iso-8859-1" />
</head>
<body>
	<h1>
		<a name="AppendixC-OptionalTasks"></a>Appendix C: Optional Tasks
	</h1>
	<p>This appendix contains a reference of all optional tasks, i.e.
		tasks that are not directly needed for building projects, but can
		assist in various aspects of development and deployment.</p>
	<p>
		This reference lists the tasks alphabetically by the name of the
		classes that implement the tasks. So if you are searching for the
		reference to the
		<code>&lt;phplint&gt;</code>
		tag, for example, you will want to look at the reference of
		PhpLintTask.
	</p>

	<h2>
		<a name="CoverageMergerTask"></a>CoverageMergerTask
	</h2>
	<p>The CoverageMergerTask merges code coverage information from
		external sources with an existing code coverage database.</p>
	<p>The format of the code coverage files is expected to be
		identical to:</p>
	<pre>
file_put_contents('/www/live/testcases/coverage.data', serialize(xdebug_get_code_coverage));
</pre>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;coverage-merger&gt;
&nbsp;&nbsp;&lt;fileset dir=&quot;/www/live/testcases&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*.data"/&gt;
&nbsp;&nbsp;&lt;/fileset&gt;
&lt;/coverage-merger&gt;
</pre>
	<h2>
		<a name="CoverageReportTask"></a>CoverageReportTask
	</h2>
	<p>The CoverageReportTask formats a coverage database into a framed
		HTML report using XSLT.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>outfile</td>
				<td>String</td>
				<td>The location for the intermediate XML file.</td>
				<td>coverage.db</td>
				<td>Yes</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>report
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>styledir</td>
						<td>String</td>
						<td>The directory where the stylesheets are located.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>todir</td>
						<td>String</td>
						<td>The directory where the files resulting from the
							transformation should be written to.</td>
						<td></td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>title</td>
						<td>String</td>
						<td>Title of the project (used in the generated document(s))</td>
						<td></td>
						<td>No</td>
					</tr>
					<tr>
						<td>usesorttable</td>
						<td>boolean</td>
						<td>Whether to use the sorttable JavaScript library (see <a
							href="http://www.kryogenix.org/code/browser/sorttable/">http://www.kryogenix.org/code/browser/sorttable/</a>)</td>
						<td>false</td>
						<td>No</td>
					</tr>
				</tbody>
			</table></li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;coverage-report outfile=&quot;reports/coverage.xml&quot;&gt;
&nbsp;&nbsp;&lt;report todir=&quot;reports/coverage&quot; styledir=&quot;/home/phing/etc&quot;/&gt;
&lt;/coverage-report&gt;
</pre>
	<h2>
		<a name="CoverageSetupTask"></a>CoverageSetupTask
	</h2>
	<p>The CoverageSetupTask prepares a database which can be used to
		gather code coverage information for unit tests.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>database</td>
				<td>String</td>
				<td>The location for the coverage database.</td>
				<td>coverage.db</td>
				<td>Yes</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>classpath</li>
		<li>fileset</li>
		<li>filelist</li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;coverage-setup database=&quot;./reports/coverage.db&quot;&gt;
&nbsp;&nbsp;&lt;fileset dir=&quot;classes&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*.php"/&gt;
&nbsp;&nbsp;&lt;/fileset&gt;
&lt;/coverage-setup&gt;
&lt;phpunit codecoverage=&quot;true&quot;&gt;
&nbsp;&nbsp;&lt;batchtest&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;fileset dir=&quot;src&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name=&quot;*Test.php&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;
&nbsp;&nbsp;&lt;/batchtest&gt;
&lt;/phpunit&gt;
</pre>

	<h2>
		<a name="CoverageThresholdTask"></a>CoverageThresholdTask
	</h2>
	<p>This task validates the code coverage database and will stop the
		build cycle if any class or method or entire project's coverage is
		lower than the specified threshold.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>database</td>
				<td>String</td>
				<td>The location of the coverage database. (This is optional if
					<em>CoverageSetupTask</em> has run before)</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>perProject</td>
				<td>Integer</td>
				<td>The minimum code coverage for the entire project.</td>
				<td>25</td>
				<td>No</td>
			</tr>
			<tr>
				<td>perClass</td>
				<td>Integer</td>
				<td>The minimum code coverage for any class.</td>
				<td>25</td>
				<td>No</td>
			</tr>
			<tr>
				<td>perMethod</td>
				<td>Integer</td>
				<td>The minimum code coverage for any method.</td>
				<td>25</td>
				<td>No</td>
			</tr>
			<tr>
				<td>verbose</td>
				<td>Boolean</td>
				<td>Whether to enable detailed logging or not.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>classpath</li>
        <li>excludes</li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;coverage-threshold database=&quot;./reports/coverage.db&quot;/&gt;
</pre>
	<p>Validates an optional code coverage database against the default
		thresholds.</p>
	<pre>
&lt;coverage-threshold
    perProject=&quot;50&quot;
    perClass=&quot;60&quot;
    perMethod=&quot;70&quot;/&gt;
</pre>
	<p>Validates the code coverage database (from CoverageSetupTask)
		against the specified thresholds.</p>

    <pre>
&lt;coverage-threshold
    perProject=&quot;50&quot;
    perClass=&quot;60&quot;
    perMethod=&quot;70&quot;/&gt;
    &lt;excludes&gt;
        &lt;file&gt;**/*Processor.php&lt;/file&gt;
        &lt;class&gt;Model_Filter_Windows&lt;/class&gt;
        &lt;method&gt;Model_System::execute()&lt;/method&gt;
    &lt;/excludes&gt;
</pre>
    <p>Validates the code coverage database (from CoverageSetupTask)
        against the specified thresholds and excludes the given file, class and method from
        threshold validation. The filename is relative to the project basedir. 
        A Method can be named either "Model_System::execute()" or "Model_System::execute". 
        The method name is considered only for the given class "Model_System".</p>

	<h2>
		<a name="DbDeployTask"></a>DbDeployTask
	</h2>
	<p>
		The <em>DbDeployTask</em> creates .sql files for making revisions to a
		database, based on dbdeploy conventions centering around a changelog
		table in the database. See <a
			href="http://dbdeploy.com/documentation/getting-started/rules-for-using-dbdeploy/">rules
			for using dbdeploy</a> for more information. You will need a changelog
		table like so:
	</p>
	<pre>CREATE TABLE changelog (
  change_number BIGINT NOT NULL,
  delta_set VARCHAR(10) NOT NULL,
  start_dt TIMESTAMP NOT NULL,
  complete_dt TIMESTAMP NULL,
  applied_by VARCHAR(100) NOT NULL,
  description VARCHAR(500) NOT NULL
)</pre>
	<h3>Example</h3>
	<pre>
&lt;dbdeploy
  url=&quot;sqlite:${project.basedir}/data/db.sqlite&quot;
  userid=&quot;dbdeploy&quot;
  password=&quot;dbdeploy&quot;
  dir=&quot;${project.basedir}/data/dbdeploy/deltas&quot;
/&gt;
</pre>
	<p>The above example uses a sqlite database and delta scripts
		located in dbdeploy/deltas in the project base dir.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>url</td>
				<td>String</td>
				<td>PDO connection url</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>userid</td>
				<td>String</td>
				<td>DB userid to use for accessing the changelog table</td>
				<td>none</td>
				<td>As required by db</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>DB password to use for accessing the changelog table</td>
				<td>none</td>
				<td>As required by db</td>
			</tr>
			<tr>
				<td>dir</td>
				<td>String</td>
				<td>Directory containing dbdeploy delta scripts</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>outputfile</td>
				<td>String</td>
				<td>Filename in which deployment SQL will be generated</td>
				<td>dbdeploy_deploy.sql</td>
				<td>No</td>
			</tr>
			<tr>
				<td>undooutputfile</td>
				<td>String</td>
				<td>Filename in which undo SQL will be generated</td>
				<td>dbdeploy_undo.sql</td>
				<td>No</td>
			</tr>
			<tr>
				<td>deltaset</td>
				<td>String</td>
				<td>deltaset to check within db</td>
				<td>Main</td>
				<td>No</td>
			</tr>
			<tr>
				<td>lastchangetoapply</td>
				<td>Integer</td>
				<td>Highest-numbered delta script to apply to db</td>
				<td>999</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h2>
		<a name="DocBloxTask"></a>DocBloxTask
	</h2>
	<p>
		This task runs <a href="http://www.docblox-project.org/"
			target="_blank">DocBlox</a>, a PHP 5.3-compatible API documentation
		tool.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>title</td>
				<td>String</td>
				<td>Title of the project.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>destdir</td>
				<td>String</td>
				<td>Destination directory for output files.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Suppress DocBlox chatter.</td>
				<td>true</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset - Files that should be included for parsing</li>
	</ul>
	<h3>Examples</h3>
	<pre>
&lt;docblox title=&quot;API Documentation&quot;
  destdir=&quot;apidocs&quot;&gt;
   &lt;fileset dir=&quot;./classes&quot;&gt;
      &lt;include name=&quot;**/*.php&quot; /&gt;
   &lt;/fileset&gt;
&lt;/docblox&gt;
</pre>
	<h2>
		<a name="ExportPropertiesTask"></a>ExportPropertiesTask
	</h2>
	<p>Exports all defined properties to a specified file.</p>
	<h3>Example</h3>
	<pre>
&lt;exportproperties targetfile="output.props" /&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>targetfile</td>
				<td>String</td>
				<td>Target file for saved properties</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>disallowedPropertyPrefixes</td>
				<td>String</td>
				<td>Exclude properties starting with these prefixes (separated
					by <em>,</em></td>
				<td><em>'host.'</em>, <em>'phing.'</em>, <em>'os.'</em>, <em>'php.'</em>,
					<em>'line.'</em>, <em>'env.'</em>, <em>'user.'</em></td>
				<td>No</td>
			</tr>
		</tbody>
	</table>


	<h2>
		<a name="FileHashTask"></a>FileHashTask
	</h2>
	<p>Calculates either MD5 or SHA1 hash value of a file and stores
		the value as a hex string in a property.</p>
	<h3>Example</h3>
	<pre>
&lt;filehash file="${builddir}/${tarball}.tar.${compression}" /&gt;
&lt;echo "Hashvalue is; ${filehashvalue}" /&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Filename</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>hashtype</td>
				<td>Integer</td>
				<td>Specifies what hash algorithm to use. 0=MD5, 1=SHA1</td>
				<td>0</td>
				<td>No</td>
			</tr>
			<tr>
				<td>propertyname</td>
				<td>String</td>
				<td>Name of property where the hash value is stored</td>
				<td>filehashvalue</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>

	<h2>
		<a name="FileSizeTask"></a>FileSizeTask
	</h2>
	<p>Stores the size of a specified file in a property. The file size
		is returned in bytes.</p>
	<h3>Example</h3>
	<pre>
&lt;filesize file="${builddir}/${tarball}.tar.${compression}" /&gt;
&lt;php expression="floor(${filesize}/1024)" returnProperty="ksize" /&gt;
&lt;php expression="floor(${filesize}/1024/1024)" returnProperty="msize" /&gt;
&lt;echo msg="Filesize is: ${ksize} kB"/&gt;
&lt;echo msg="Filesize is: ${msize} MB"/&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Filename</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>propertyname</td>
				<td>String</td>
				<td>Name of property where the file size is stored</td>
				<td>filesize</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>



	<h2>
		<a name="FtpDeployTask"></a>FtpDeployTask
	</h2>
	<p>Deploys a set of files to a remote FTP server.</p>
	<h3>Example</h3>
	<pre>&lt;ftpdeploy 
  host="${ftp.host}" 
  port="${ftp.port}" 
  username="${ftp.username}" 
  password="${ftp.password}"
  dir="${ftp.dir}" 
  passive=&quot;false&quot;
  mode="${ftp.mode}"&gt;
  &lt;fileset dir=&quot;.&quot;&gt;
    &lt;include name=&quot;**&quot;/&gt;
    &lt;exclude name=&quot;phing&quot;/&gt;
    &lt;exclude name=&quot;build.xml&quot;/&gt;
    &lt;exclude name=&quot;images/**.png&quot;/&gt;
    &lt;exclude name=&quot;images/**.gif&quot;/&gt;
    &lt;exclude name=&quot;images/**.jpg&quot;/&gt;
  &lt;/fileset&gt;
&lt;/ftpdeploy&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>host</td>
				<td>String</td>
				<td>The hostname of the remote server.</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>port</td>
				<td>Boolean</td>
				<td>The port of the remote server.</td>
				<td>21</td>
				<td>No</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>The username to use when logging in to the remote server.</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>The password to use when logging in to the remote server</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>dir</td>
				<td>String</td>
				<td>Directory on the remote server.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>mode</td>
				<td>String</td>
				<td>The transfer mode to use, either <em>ascii</em> or <em>binary</em>.</td>
				<td>binary</td>
				<td>No</td>
			</tr>
			<tr>
				<td>clearfirst</td>
				<td>Boolean</td>
				<td>Delete all files in the remote directory before uploading</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>passive</td>
				<td>Boolean</td>
				<td>Open connection in passive mode</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>level</td>
				<td>String</td>
				<td>Control the level at which the task reports status
					messages. One of <em>error</em>, <em>warning</em>, <em>info</em>, <em>verbose</em>,
					<em>debug</em>.</td>
				<td><em>verbose</em></td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset
			<p>The files to deploy</p></li>
	</ul>

	<h2>
		<a name="GitInitTask"></a>GitInitTask
	</h2>
	<p>Create an empty git repository or reinitialize an existing one.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>bare</td>
				<td>Boolean</td>
				<td>Create bare repository. See --bare option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-init.html">git-init</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- Initialize normal repository --&gt;
&lt;gitinit repository="${repo.dir.resolved}" /&gt;

&lt;!-- Initialize bare repository --&gt;
&lt;gitinit bare="true" repository="${repo.dir.resolved}" /&gt;
</pre>


	<h2>
		<a name="GitCloneTask"></a>GitCloneTask
	</h2>
	<p>Clone a repository into a new directory.</p>

	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>The (possibly remote) repository to clone from.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>targetPath</td>
				<td>String</td>
				<td>The name of a new directory to clone into. Cloning into an
					existing directory is only allowed if the directory is empty.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>bare</td>
				<td>Boolean</td>
				<td>Create bare repository. See --bare option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-clone.html">git-clone</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- Clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;

&lt;!-- Clone bare repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}"
    bare="true" /&gt;
</pre>

	<h2>
		<a name="GitGcTask"></a>GitGcTask
	</h2>
	<p>Cleanup unnecessary files and optimize the local repository.</p>

	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>The repository to cleanup.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>aggressive</td>
				<td>Boolean</td>
				<td>This option will cause git gc to more aggressively optimize
					the repository at the expense of taking much more time. See
					--aggressive option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html">git-gc</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>auto</td>
				<td>Boolean</td>
				<td>With this option, git gc checks whether any housekeeping is
					required; if not, it exits without performing any work. See --auto
					option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html">git-gc</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>noprune</td>
				<td>Boolean</td>
				<td>Do not prune any loose objects. See --no-prune option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html">git-gc</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>prune</td>
				<td>string</td>
				<td>Prune loose objects older than date. See --prune option of
					<a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html">git-gc</a>.</td>
				<td>2.weeks.ago</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- Clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;

&lt;!-- Cleanup repository--&gt;
&lt;gitgc 
    repository="${repo.dir.resolved}" 
    aggressive="true"
    prune="1.week.ago" /&gt;
</pre>

	<h2>
		<a name="GitBranchTask"></a>GitBranchTask
	</h2>
	<p>
		Create, move or delete repository branches. See official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html">documentation</a>
		(branch listing functionality is omitted in current implementation).
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>branchname</td>
				<td>String</td>
				<td>The name of the branch to create or delete.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>newbranch</td>
				<td>String</td>
				<td>The new name for an existing branch.</td>
				<td>n/a</td>
				<td>Yes, if branch move invoked</td>
			</tr>
			<tr>
				<td>startpoint</td>
				<td>String</td>
				<td>The new branch head will point to this commit. It may be
					given as a branch name, a commit-id, or a tag. If this option is
					omitted, the current HEAD will be used instead. See
					&lt;start-point&gt; argument of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html">git-branch</a>.</td>
				<td></td>
				<td>No</td>
			</tr>
			<tr>
				<td>setupstream</td>
				<td>String</td>
				<td>If specified branch does not exist yet or if --force has
					been given, acts exactly like --track. Otherwise sets up
					configuration like --track would when creating the branch, except
					that where branch points to is not changed. See --set-upstream
					option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html">git-branch</a>.</td>
				<td></td>
				<td>No</td>
			</tr>
			<tr>
				<td>track</td>
				<td>Boolean</td>
				<td>See --track option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html">git-branch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>notrack</td>
				<td>Boolean</td>
				<td>See --no-track option of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html">git-branch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>Reset &lt;branchname&gt; to &lt;startpoint&gt; if
					&lt;branchname&gt; exists already. Without -f git branch refuses to
					change an existing branch.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>move</td>
				<td>Boolean</td>
				<td>Move/rename a branch and the corresponding reflog.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>forcemove</td>
				<td>Boolean</td>
				<td>Move/rename a branch even if the new branch name already
					exists.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>delete</td>
				<td>Boolean</td>
				<td>Delete a branch. The branch must be fully merged in its
					upstream branch, or in HEAD if no upstream was set with --track or
					--set-upstream.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>forcedelete</td>
				<td>Boolean</td>
				<td>Delete a branch irrespective of its merged status.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- Initialize normal repository --&gt;
&lt;gitinit repository="${repo.dir.resolved}" /&gt;

&lt;!-- Create branch "sample-branch" tracking current HEAD --&gt;
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="sample-branch" /&gt;

&lt;!-- 
Create branch "sample-branch" tracking origin/master 
Note that you can omit both startpoint and track attributes in this case
--&gt;
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="sample-branch"
    startpoint="origin/master"
    track="true" /&gt;

&lt;!-- Delete fully merged branch "sample-branch" --&gt;
&lt;gitbranch 
    repository="${repo.dir.resolved}" 
    branchname="sample-branch" 
    delete="true" /&gt;

&lt;!-- Force delete even unmerged branch "sample-branch" --&gt;
&lt;gitbranch 
    repository="${repo.dir.resolved}" 
    branchname="sample-branch" 
    forcedelete="true" /&gt;

&lt;!-- Renabe "branch1" to "branch2" --&gt;
&lt;gitbranch 
    repository="${repo.dir.resolved}" 
    branchname="branch1" 
    newbranch="branch2"
    move="true" /&gt;

</pre>

	<h2>
		<a name="GitFetchTask"></a>GitFetchTask
	</h2>
	<p>
		Download objects and refs from another repository. See official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>source</td>
				<td>String</td>
				<td>The "remote" repository that is the source of a fetch or
					pull operation. See &lt;repository&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>origin</td>
				<td>No</td>
			</tr>
			<tr>
				<td>refspec</td>
				<td>String</td>
				<td>See &lt;refspec&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td></td>
				<td>No</td>
			</tr>
			<tr>
				<td>group</td>
				<td>String</td>
				<td>A name referring to a list of repositories as the value of
					remotes.&lt;group&gt; in the configuration file. See &lt;group&gt;
					in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td></td>
				<td>No</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Silence any internally used git commands. Progress is not
					reported to the standard error stream. See --quiet in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>all</td>
				<td>Boolean</td>
				<td>Fetch all remotes. See --all in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>keep</td>
				<td>Boolean</td>
				<td>Keep downloaded pack. See --keep in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>prune</td>
				<td>Boolean</td>
				<td>After fetching, remove any remote tracking branches which
					no longer exist on the remote. See --prune in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>tags</td>
				<td>Boolean</td>
				<td>See --tags in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>notags</td>
				<td>Boolean</td>
				<td>See --no-tags in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>When git fetch is used with &lt;rbranch&gt;:&lt;lbranch&gt;
					refspec, it refuses to update the local branch &lt;lbranch&gt;
					unless the remote branch &lt;rbranch&gt; it fetches is a descendant
					of &lt;lbranch&gt;. This option overrides that check. See --force
					in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html">git-fetch</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- Initialize normal repository --&gt;
&lt;gitinit repository="${repo.dir.resolved}" /&gt;

&lt;!-- Fetch objects from all remotes --&gt;
&lt;gitfetch
    repository="${repo.dir.resolved}" all="true" /&gt;

&lt;!-- Fetch from origin/master to "refspec-branch" local branch --&gt;
&lt;gitfetch 
    repository="${repo.dir.resolved}" 
    source="origin"
    refspec="master:refspec-branch" 
    quiet="true" /&gt;
</pre>

	<h2>
		<a name="GitCheckoutTask"></a>GitCheckoutTask
	</h2>
	<p>
		Checkout a branch or paths to the working tree. See official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>branchname</td>
				<td>String</td>
				<td>Branch to checkout. See &lt;branch&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">git-checkout</a>.</td>
				<td>origin</td>
				<td>No</td>
			</tr>
			<tr>
				<td>startpoint</td>
				<td>String</td>
				<td>The name of a commit at which to start the new branch;
					Defaults to HEAD. See &lt;start_point&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">git-checkout</a>.</td>
				<td></td>
				<td>No</td>
			</tr>
			<tr>
				<td>create</td>
				<td>Boolean</td>
				<td>Create a new branch named &lt;branchname&gt; and start it
					at &lt;startpoint&gt;</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>forcecreate</td>
				<td>Boolean</td>
				<td>Creates the branch &lt;branchname&gt; and start it at
					&lt;startpoint&gt;; if it already exists, then reset it to
					&lt;startpoint&gt;. This is equivalent to running "git branch" with
					"-f".</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>merge</td>
				<td>Boolean</td>
				<td>See --merge in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">git-checkout</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>track</td>
				<td>Boolean</td>
				<td>See --track in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">git-checkout</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>notrack</td>
				<td>Boolean</td>
				<td>See --no-track in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">git-checkout</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Quiet, suppress feedback messages. See --quiet in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">git-checkout</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>When switching branches, proceed even if the index or the
					working tree differs from HEAD. This is used to throw away local
					changes. See --force in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html">git-checkout</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;

&lt;!-- create and switch to "mybranch" branch --&gt;
&lt;gitcheckout
    repository="${repo.dir.resolved}" 
    branchname="mybranch" quiet="true" create="true" /&gt;

&lt;!-- get back to "master" branch --&gt;
&lt;gitcheckout
    repository="${repo.dir.resolved}" 
    branchname="master" quiet="true" /&gt;

&lt;!-- create (force) already created branch --&gt;
&lt;gitcheckout
    repository="${repo.dir.resolved}" 
    branchname="mybranch" quiet="true" 
    forceCreate="true" /&gt;
</pre>

	<h2>
		<a name="GitMergeTask"></a>GitMergeTask
	</h2>
	<p>
		Join two or more development histories together. See official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>remote</td>
				<td>String</td>
				<td>Space separated list of branches to merge into current
					HEAD. See &lt;commit&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>message</td>
				<td>String</td>
				<td>Commit message to be used for the merge commit (in case one
					is created). See &lt;msg&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>fastForwardCommit</td>
				<td>Boolean</td>
				<td>If set false (default), will not generate a merge commit if
					the merge resolved as a fast-forward, only update the branch
					pointer.<br /> If set true, will generate a merge commit even if
					the merge resolved as a fast-forward. See --ff/--no-ff options in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>strategy</td>
				<td>String</td>
				<td>Merge strategy. One of "resolve", "recursive", "octopus",
					"ours", or "subtree". See &lt;strategy&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>strategyOption</td>
				<td>String</td>
				<td>Pass merge strategy specific option through to the merge
					strategy. See &lt;strategy-option&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>commit</td>
				<td>Boolean</td>
				<td>See --commit in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nocommit</td>
				<td>Boolean</td>
				<td>See --no-commit in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Quiet, suppress feedback messages. See --quiet in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html">git-merge</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;

&lt;!-- create couple of test branches --&gt;
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="merge-test-1" startpoint="origin/master" /&gt;
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="merge-test-2" startpoint="origin/master" /&gt;

&lt;!-- Merge those branches back into master --&gt;
&lt;gitmerge
    repository="${repo.dir.resolved}" 
    remote="merge-test-1 merge-test-2" 
    message="merging repos" commit="true" /&gt;
</pre>

	<h2>
		<a name="GitPullTask"></a>GitPullTask
	</h2>
	<p>
		Fetch from and merge with another repository or a local branch. See
		official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>all</td>
				<td>Boolean</td>
				<td>Fetch all remotes</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>source</td>
				<td>String</td>
				<td>The "remote" repository that is the source of a fetch or
					pull operation. See &lt;repository&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>origin</td>
				<td>Yes, if allRemotes set to false</td>
			</tr>
			<tr>
				<td>refspec</td>
				<td>String</td>
				<td>See &lt;refspec&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>strategy</td>
				<td>String</td>
				<td>Merge strategy. One of "resolve", "recursive", "octopus",
					"ours", or "subtree". See &lt;strategy&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>strategyOption</td>
				<td>String</td>
				<td>Pass merge strategy specific option through to the merge
					strategy. See &lt;strategy-option&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>rebase</td>
				<td>Boolean</td>
				<td>See --rebase in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>norebase</td>
				<td>Boolean</td>
				<td>See --no-rebase in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>tags</td>
				<td>Boolean</td>
				<td>Enable tag references following. See --tags in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>notags</td>
				<td>Boolean</td>
				<td>Disable tag references following. See --no-tags in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>keepFiles</td>
				<td>Boolean</td>
				<td>See --keep in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>append</td>
				<td>Boolean</td>
				<td>See --append in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Quiet, suppress feedback messages. See --quiet in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>Force update. See --force in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html">git-pull</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;

&lt;!-- pull from all remotes --&gt;
&lt;gitpull
    repository="${repo.dir.resolved}" all="true" /&gt;

&lt;!-- pull remote origin/foobranch and rebase when merging --&gt;
&lt;gitpull
    repository="${repo.dir.resolved}" 
    source="origin" refspec="foobranch" 
    strategy="recursive" keep="true"
    force="true" quiet="true" rebase="true" /&gt;
</pre>


	<h2>
		<a name="GitPushTask"></a>GitPushTask
	</h2>
	<p>
		Update remote refs along with associated objects. See official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>all</td>
				<td>Boolean</td>
				<td>Push all references</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>destination</td>
				<td>String</td>
				<td>The "remote" repository that is destination of a push
					operation. See &lt;repository&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">git-push</a>.</td>
				<td>origin</td>
				<td>Yes, if allRemotes set to false</td>
			</tr>
			<tr>
				<td>refspec</td>
				<td>String</td>
				<td>See &lt;refspec&gt; in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">git-push</a>.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>mirror</td>
				<td>Boolean</td>
				<td>See --mirror in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">git-push</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>delete</td>
				<td>Boolean</td>
				<td>Delete "remote" reference. Same as prefixing the refspec
					with colon. See --delete in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">git-push</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>tags</td>
				<td>Boolean</td>
				<td>Push all references under refs/tags. See --tags in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">git-push</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Quiet, suppress feedback messages. See --quiet in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">git-push</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>Force update. See --force in <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html">git-push</a>.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;

&lt;!-- push branch "master" into "foobranch" on "origin" remote --&gt;
&lt;gitpush
    repository="${repo.dir.resolved}" 
    refspec="master:foobranch" tags="true" /&gt;

&lt;!-- create new branch "newbranch" on "origin" remote --&gt;
&lt;gitpush
    repository="${repo.dir.resolved}" 
    refspec="master:newbranch" quiet="true" /&gt;

&lt;!-- delete "newbranch" branch from "origin" remote --&gt;
&lt;gitpush
    repository="${repo.dir.resolved}" 
    delete="true"
    refspec="newbranch" quiet="true" /&gt;
</pre>

	<h2>
		<a name="GitTagTask"></a>GitTagTask
	</h2>
	<p>
		Create, list, delete or verify a tag object signed with GPG. See
		official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>message</td>
				<td>String</td>
				<td>Use given tag message. See -m of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>name</td>
				<td>String</td>
				<td>Tag name</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>commit</td>
				<td>String</td>
				<td>&lt;commit&gt; argument to git-tag</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>object</td>
				<td>String</td>
				<td>&lt;object&gt; argument to git-tag</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>pattern</td>
				<td>String</td>
				<td>&lt;pattern&gt; argument to git-tag</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>outputProperty</td>
				<td>String</td>
				<td>Property name to set with output value from git-tag</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Take tag message from given file. See -F of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>annotate</td>
				<td>Boolean</td>
				<td>Make unsigned, annotated tag object. See -a of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>Replace existing tag with given name. See -f of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>delete</td>
				<td>Boolean</td>
				<td>Delete existing tags with given names. See -d of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>list</td>
				<td>Boolean</td>
				<td>List tags with names matching given pattern. See -l of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>num</td>
				<td>Integer</td>
				<td>Specifies how many lines from the annotation, if any, are
					printed when using -l. See -n of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>contains</td>
				<td>String</td>
				<td>Only list tags containing specified commit. See --contains
					of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>sign</td>
				<td>Boolean</td>
				<td>Make GPG-signed tag. See -a of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>keySign</td>
				<td>String</td>
				<td>Make GPG-signed tag, using given key. See -u of git-tag of
					<a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>verify</td>
				<td>Boolean</td>
				<td>Verify GPG signature of given tag names. See -v of <a
					href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html">git-tag</a>
				</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;

&lt;gittag repository="${repo.dir.resolved}" name="ver1.0" /&gt;
&lt;!-- Force duplicate tag creation --&gt;
&lt;gittag 
    repository="${repo.dir.resolved}" 
    name="ver1.0" force="true"/&gt;
&lt;!-- Create tag with annotation and message --&gt;
&lt;gittag 
    repository="${repo.dir.resolved}" 
    name="ver1.0"
    annotate="true" message="Version 1.0 tag"/&gt;
&lt;!-- Delete tag --&gt;
&lt;gittag 
    repository="${repo.dir.resolved}"
        name="ver2.0" delete="true" /&gt;
&lt;!-- List tags matching to pattern "marked" into "tags" variable --&gt;
&lt;gittag repository="${repo.dir.resolved}" 
    list="true"
    outputProperty="tags" 
    pattern="marked" /&gt;
</pre>

	<h2>
		<a name="GitLogTask"></a>GitLogTask
	</h2>
	<p>
		Show commit logs. See official <a
			href="http://www.kernel.org/pub/software/scm/git/docs/git-log.html">documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>gitPath</td>
				<td>String</td>
				<td>Path to Git binary</td>
				<td>/usr/bin/git</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repository</td>
				<td>String</td>
				<td>Path to Git repository</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>paths</td>
				<td>String</td>
				<td>&lt;path&gt; arguments to git-log. Accepts one or more
					paths delimited by PATH_SEPARATOR</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>outputProperty</td>
				<td>String</td>
				<td>Property name to set with output value from git-log</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>format</td>
				<td>String</td>
				<td>Commit format. See --format of git-log. Can be one of <i>oneline</i>,
					<i>short</i>, <i>medium</i>, <i>full</i>, <i>fuller</i>, <i>email</i>,
					<i>raw</i> and <i>format:&lt;string&gt;</i></td>
				<td>medium</td>
				<td>No</td>
			</tr>
			<tr>
				<td>date</td>
				<td>String</td>
				<td>Date format. See --date of git-log.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>since</td>
				<td>String</td>
				<td>&lt;since&gt; argument to git-log.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>until</td>
				<td>String</td>
				<td>&lt;until&gt; argument to git-log.</td>
				<td>HEAD</td>
				<td>No</td>
			</tr>
			<tr>
				<td>stat</td>
				<td>String</td>
				<td>Generate a diffstat. See --stat of git-log</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nameStatus</td>
				<td>Boolean</td>
				<td>Names + status of changed files. See --name-status of
					git-log.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>maxCount</td>
				<td>Integer</td>
				<td>Number of commits to show. See -&lt;n&gt;|-n|--max-count of
					git-log.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>noMerges</td>
				<td>boolean</td>
				<td>Don't show commits with more than one parent. See
					--no-merges of git-log.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
&lt;property name="repo.dir" value="./relative/path/to/repo" /&gt;
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" /&gt;

&lt;!-- clone repository --&gt;
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" /&gt;
<!-- write git-log output to "logs" variable -->
&lt;gitlog 
    paths="${repo.dir.resolved}"
    format="oneline"
    maxCount="2"
    stat="true"
    noMerges="false"
    since="Sun Jan 23 23:55:42 2011 +0300"
    until="Mon Jan 24 09:59:33 2011 +0300"
    outputProperty="logs" 
    repository="${repo.dir.resolved}" /&gt;
</pre>

	<h2>
		<a name="HttpGetTask"></a>HttpGetTask
	</h2>
	<p>This task will download a file through HTTP GET and save it to a
		specified directory. You need an installed version of HTTP_Request2 to
		use this task.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>url</td>
				<td>String</td>
				<td>The request URL</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>dir</td>
				<td>String</td>
				<td>The directory to save the file</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>filename</td>
				<td>String</td>
				<td>The filename for the downloaded file</td>
				<td>The filename part of the URL</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<pre>
 &lt;httpget url=&quot;http://buildserver.com/builds/latest.stable.tar.bz2&quot; dir=&quot;/usr/local/lib&quot;/&gt;
</pre>

	<h2>
		<a name="HttpRequestTask"></a>HttpRequestTask
	</h2>
	<p>This task will make an HTTP request to the provided URL and
		match the response against the provided regular expression. If an
		regular expression is provided and doesn't match the build will fail.
		You need an installed version of HTTP_Request2 to use this task.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>url</td>
				<td>String</td>
				<td>The request URL</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>responseRegex</td>
				<td>String</td>
				<td>The regular expression for matching the response</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>authUser</td>
				<td>String</td>
				<td>The authentication user name</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>authPassword</td>
				<td>String</td>
				<td>The authentication password</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>authScheme</td>
				<td>String</td>
				<td>The authentication scheme</td>
				<td>basic</td>
				<td>No</td>
			</tr>
			<tr>
				<td>verbose</td>
				<td>Boolean</td>
				<td>Whether to enable detailed logging</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>observerEvents</td>
				<td>String</td>
				<td>Comma-separated list of events to log when <em>verbose</em>
					is set to <em>true</em></td>
				<td>connect, sentHeaders, sentBodyPart, receivedHeaders,
					receivedBody, disconnect</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>config
			<p>Holds additional config data. See HTTP_Request2 for supported
				values.</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>name</td>
						<td>String</td>
						<td>Config parameter name</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>value</td>
						<td>Mixed</td>
						<td>Config value</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table></li>
		<li>header
			<p>
				Holds additional header <em>name</em> and <em>value</em>.
			</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>name</td>
						<td>String</td>
						<td>Header name</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>value</td>
						<td>String</td>
						<td>Header value</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table></li>
	</ul>
	<h3>Examples</h3>
	<pre>
 &lt;http-request url=&quot;http://my-production.example.com/check-deployment.php&quot;/&gt;
</pre>
	<p>Just perform a HTTP request to the given URL.</p>
	<pre>
 &lt;http-request
   url=&quot;http://my-production.example.com/check-deployment.php&quot;
   responseRegex=&quot;/Heartbeat/&quot;
   verbose&quot;true&quot;
   observerEvents=&quot;connect, disconnect&quot;/&gt;
</pre>
	<p>Perform a HTTP request to the given URL and matching the
		response against the given regex pattern. Enable detailed logging and
		log only the specified events.</p>
	<pre>
 &lt;http-request url="http://my-production.example.com/check-deployment.php"&gt;
   &lt;config name=&quot;adapter&quot; value=&quot;HTTP_Request2_Adapter_Curl&quot;/&gt;
   &lt;header name=&quot;user-agent&quot; value=&quot;Phing HttpRequestTask&quot;/&gt;
 &lt;/http-request&gt;
</pre>
	<p>Perform a HTTP request to the given URL. Setting request adapter
		to curl instead of socket. Setting an additional header.</p>

	<h2>
		<a name="IoncubeEncoderTask"></a>IoncubeEncoderTask
	</h2>
	<p>
		The <em>IoncubeEncoderTask</em> executes the <a
			href="http://www.ioncube.com" target="_blank">ionCube</a> encoder
		(for either PHP4 or PHP5 projects).
	</p>
	<p>
		For more information on the meaning of the various options please
		consult the ionCube <a href="http://www.ioncube.com/USER-GUIDE.pdf"
			target="_blank">user guide</a>.
	</p>
	<h3>Example</h3>
	<pre>&lt;ioncubeencoder
   binary="true"
   copy="*.ini config/*"
   encode="*.inc licenses/license.key"
   encrypt="*.tpl *.xml"
   fromdir="files"
   ignore="*.bak RCS/ *~ docs/"
   ioncubepath="/usr/local/ioncube"
   keep="docs/README"
   licensepath="mylicense.txt"
   optimize="max"
   passphrase="mypassphrase"
   phpversion="4"
   noshortopentags="false"
   targetoption="replace"
   todir="encoded"
   withoutruntimeloadersupport="true"
   callbackfile="errhandler.php"
   obfuscationexlusionsfile="obfex.txt"&gt;
  &lt;comment&gt;A project encoded with the ionCube encoder.&lt;/comment&gt;
&lt;/ioncubeencoder&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>allowedserver</td>
				<td>String</td>
				<td>Restricts the encoded files to particular servers and/or
					domains. Consult the IonCude documentation for more information.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>binary</td>
				<td>Boolean</td>
				<td>Whether to save encoded files in binary format (default is
					ASCII format)</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>copy</td>
				<td>String</td>
				<td>Specifies files or directories to exclude from being
					encoded or encrypted and copy them to the target directory
					(separated by space).</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>encode</td>
				<td>String</td>
				<td>Specifies additional file patterns, files or directories to
					encode, or to reverse the effect of <em>copy</em></td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>encrypt</td>
				<td>String</td>
				<td>Specify files or directories (space separated list) that
					are to be encrypted.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>expirein</td>
				<td>String</td>
				<td>Sets a period in seconds (s), minutes (m), hours (h) or
					days (d) after which the files expire. Accepts: <em>500s</em> or <em>55m</em>
					or <em>24h</em> or <em>7d</em></td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>expireon</td>
				<td>String</td>
				<td>Sets a YYYY-MM-DD date to expire the files.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>fromdir</td>
				<td>String</td>
				<td>Path containing source files</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>ignore</td>
				<td>String</td>
				<td>Set files and directories to ignore entirely and exclude
					from the target directory (separated by space).</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>ioncubepath</td>
				<td>String</td>
				<td>Path to the ionCube binaries</td>
				<td>/usr/local/ioncube</td>
				<td>No</td>
			</tr>
			<tr>
				<td>keep</td>
				<td>String</td>
				<td>Set files and directories not to be ignored (separated by
					space).</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>licensepath</td>
				<td>String</td>
				<td>Path to the license file that will be used by the encoded
					files</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nodoccomments</td>
				<td>String</td>
				<td>Omits documents comments ( /** ... */ ) from the encoded
					files.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>obfuscation-key</td>
				<td>String</td>
				<td>The obfuscation key must be supplied when using the
					obfuscate option</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>obfuscate</td>
				<td>String</td>
				<td>The Encoder can obfuscate the names of global functions,
					the names of local variables in global functions, and line numbers.
					Use either <em>all</em> or any of <em>functions</em>, <em>locals</em>
					or <em>linenos</em> separated by a space.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>optimize</td>
				<td>String</td>
				<td>Controls the optimization of the encoded files, accepts
					either <em>more</em> or <em>max</em></td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>passphrase</td>
				<td>String</td>
				<td>The passphrase to use when encoding with a license file</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>phpversion</td>
				<td>Integer</td>
				<td>The PHP version to use</td>
				<td>5</td>
				<td>No</td>
			</tr>
			<tr>
				<td>targetoption</td>
				<td>String</td>
				<td>Option to use when target directory exists, accepts <em>replace</em>,
					<em>merge</em>, <em>update</em> and <em>rename</em></td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Path to save encoded files to</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>withoutruntimeloadersupport</td>
				<td>Boolean</td>
				<td>Whether to disable support for runtime initialization of the
					ionCube Loader</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>noshortopentags</td>
				<td>Boolean</td>
				<td>Whether to disable support for short PHP tags</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>callbackfile</td>
				<td>String</td>
				<td>Path to callback file (.php)</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>obfuscationexclusionsfile</td>
				<td>String</td>
				<td>Path to obfuscation exclusions file</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
            <tr>
                <td>ignoredeprecatedwarnings</td>
                <td>Boolean</td>
                <td>Whether to ignore deprecated warnings</td>
                <td>false</td>
                <td>No</td>
            </tr>
            <tr>
                <td>ignorestrictwarnings</td>
                <td>Boolean</td>
                <td>Whether to ignore strict warnings</td>
                <td>false</td>
                <td>No</td>
            </tr>
            <tr>
                <td>allowencodingintosource</td>
                <td>Boolean</td>
                <td>Whether to allow encoding into the source tree</td>
                <td>false</td>
                <td>No</td>
            </tr>
            <tr>
                <td>messageifnoloader</td>
                <td>String</td>
                <td>A valid PHP expression to customize the "no loader installed" message</td>
                <td>n/a</td>
                <td>No</td>
            </tr>
            <tr>
                <td>actionifnoloader</td>
                <td>String</td>
                <td>A valid PHP expression to replace the "no loader installed" action</td>
                <td>n/a</td>
                <td>No</td>
            </tr>
            <tr>
                <td>showcommandline</td>
                <td>Boolean</td>
                <td>whether to show command line before it is executed</td>
                <td>false</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>comment
			<p>Custom text that is added to the start of each encoded file.</p></li>
	</ul>
	<h2>
		<a name="IoncubeLicenseTask"></a>IoncubeLicenseTask
	</h2>
	<p>
		The <em>IoncubeLicenseTask</em> executes the <a
			href="http://www.ioncube.com" target="_blank">ionCube</a>
		make_license program.
	</p>
	<p>
		For more information on the meaning of the various options please
		consult the ionCube <a href="http://www.ioncube.com/USER-GUIDE.pdf"
			target="_blank">user guide</a>.
	</p>
	<h3>Example</h3>
	<pre>&lt;ioncubelicense
   ioncubepath="/usr/local/ioncube"
   licensepath="mylicense.txt"
   passphrase="mypassphrase"
   allowedserver="00:06:4F:01:8F:2C"
   expireon="2010-09-01"
   expirein="7d"&gt;
  &lt;comment&gt;A license file made with the ionCube encoder.&lt;/comment&gt;
&lt;/ioncubelicense&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>ioncubepath</td>
				<td>String</td>
				<td>Path to the ionCube binaries</td>
				<td>/usr/local/ioncube</td>
				<td>No</td>
			</tr>
			<tr>
				<td>licensepath</td>
				<td>String</td>
				<td>Path to the license file that will be generated</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>passphrase</td>
				<td>String</td>
				<td>The passphrase to use when generating the license file</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>allowedserver</td>
				<td>String</td>
				<td>Restricts the license to particular servers and/or domains.
					Consult the IonCude documentation for more information.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>expirein</td>
				<td>String</td>
				<td>Sets a period in seconds (s), minutes (m), hours (h) or
					days (d) after which the license expires. Accepts: 500s or 55m or
					24h or 7d.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>expireon</td>
				<td>String</td>
				<td>Sets a YYYY-MM-DD date to expire the license.</td>
				<td>none</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>comment
			<p>Custom text that is added to the start of each encoded file.</p></li>
	</ul>
	<h2>
		<a name="JslLintTask"></a>JslLintTask
	</h2>
	<p>
		The <em>JslLintTask</em> uses the <a
			href="http://www.javascriptlint.com" target="_blank">Javascript
			Lint</a> program to check the sytax on one or more JavaScript source code
		files.
	</p>
	<p>
		<b>NB:</b> the Javascript lint program must be in the system path!
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>executable</td>
				<td>String</td>
				<td>Path to JSL executable</td>
				<td>jsl</td>
				<td>No</td>
			</tr>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Path to source file</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonfailure</td>
				<td>Boolean</td>
				<td>Stop the build process if the linting process encounters an
					error.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>showwarnings</td>
				<td>Boolean</td>
				<td>Sets the flag if warnings should be shown.</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>cachefile</td>
				<td>String</td>
				<td>If set, enables writing of last-modified times to <em>cachefile</em>,
					to speed up processing of files that rarely change</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>conffile</td>
				<td>String</td>
				<td>Path to JSL config file</td>
				<td>none</td>
				<td>No</td>
			</tr>
            <tr>
                <td>tofile</td>
                <td>String</td>
                <td>File to write list of 'bad files' to.</td>
                <td>n/a</td>
                <td>No</td>
            </tr>
   		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;jsllint file=&quot;path/to/source.php&quot;/&gt;
</pre>
	<p>Checking syntax of one particular source file.</p>
	<pre>
&lt;jsllint&gt;
&nbsp;&nbsp;&lt;fileset dir=&quot;src&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*.php"/&gt;
&nbsp;&nbsp;&lt;/fileset&gt;
&lt;/jsllint&gt;
</pre>
	<p>Check syntax of a fileset of source files.</p>
	<h2>
		<a name="JsMinTask"></a>JsMinTask
	</h2>
	<p>
		The <em>JsMinTask</em> minifies JavaScript files using <a
			href="http://code.google.com/p/jsmin-php/">JsMin</a>. JsMin is
		bundled with Phing and does not need to be installed separately.
	</p>
	<p>
		For more information on minifying JavaScript files see <a
			href="http://www.crockford.com/javascript/jsmin.html" target="_blank">Douglas
			Crockford's introduction to minifying JavaScript files</a>.
	</p>
	<h3>Example</h3>
	<pre>&lt;jsMin targetDir="docroot/script/minified" failOnError="false"&gt;
  &lt;fileset dir="docroot/script"&gt;
    &lt;include name="**/*.js"/&gt;
  &lt;/fileset&gt;
&lt;/jsMin&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>targetDir</td>
				<td>String</td>
				<td>Path where to store minified JavaScript files</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>suffix</td>
				<td>String</td>
				<td>Suffix to append to the filenames.</td>
				<td>-min</td>
				<td>No</td>
			</tr>
			<tr>
				<td>failonerror</td>
				<td>Boolean</td>
				<td>Whether an error while minifying a JavaScript file should
					stop the build or not</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset
			<p>JavaScript files to be minified.</p></li>
	</ul>

	<h2>
		<a name="MailTask"></a>MailTask
	</h2>
	<p>A task to send email.</p>

	<h3>Example</h3>
	<pre>&lt;mail tolist=&quot;user@example.org&quot; subject=&quot;build complete&quot;"&gt;The build process is a success...&lt;/mail&gt;</pre>

	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>from</td>
				<td>String</td>
				<td>Email address of sender.</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>tolist</td>
				<td>String</td>
				<td>Comma-separated list of recipients.</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>message</td>
				<td>String</td>
				<td>Message to send in the body of the email.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>subject</td>
				<td>String</td>
				<td>Email subject line.</td>
				<td>none</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset
			<p>Files to be attached (not implemented at this time).</p></li>
	</ul>

	<h2>
		<a name="PatchTask"></a>PatchTask
	</h2>
	<p>
		The <em>PatchTask</em> uses the <a
			href="http://savannah.gnu.org/projects/patch" target="_blank">patch</a>
		program to apply diff file to originals.
	</p>
	<p>
		<b>NB:</b> the patch program must be in the system path!
	</p>

	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>patchfile</td>
				<td>String</td>
				<td>File that includes the diff output</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>originalfile</td>
				<td>String</td>
				<td>File to patch. If not specified Task tries to guess it from
					the diff file</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>destfile</td>
				<td>String</td>
				<td>File to send the output to instead of patching the file in
					place</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>backups</td>
				<td>Boolean</td>
				<td>Keep backups of the unpatched files</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Work silently unless an error occurs</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>reverse</td>
				<td>Boolean</td>
				<td>Assume patch was created with old and new files swapped</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignorewhitespace</td>
				<td>Boolean</td>
				<td>Ignore whitespace differences</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>strip</td>
				<td>Integer</td>
				<td>Strip the smallest prefix containing specified number of
					leading slashes from filenames</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>dir</td>
				<td>String</td>
				<td>The directory in which to run the patch command</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonfailure</td>
				<td>Boolean</td>
				<td>Stop the build process if the patching process encounters
					an error.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>

	<h3>Example</h3>
	<pre>
&lt;patch
&nbsp;&nbsp;patchfile=&quot;/path/to/patches/file.ext.patch&quot;
&nbsp;&nbsp;dir=&quot;/path/to/original&quot;
/&gt;
</pre>

	<p>Apply "file.ext.path" to original file locataed in
		"/path/to/original" folder.</p>

	<h2>
		<a name="PDOSQLExecTask"></a>PDOSQLExecTask
	</h2>
	<p>
		The <em>PDOSQLExecTask</em> executes SQL statements using PDO.
	</p>
	<h3>Examples</h3>
	<pre>&lt;pdosqlexec url="pgsql:host=localhost dbname=test"&gt;
  &lt;fileset dir=&quot;sqlfiles&quot;&gt;
	  &lt;include name=&quot;*.sql&quot;/&gt;
	  &lt;/fileset&gt;<br />&lt;/pdosqlexec&gt;
</pre>
	<pre>&lt;pdosqlexec url="mysql:host=localhost;dbname=test" userid="username" password="password"&gt;
  &lt;transaction src=&quot;path/to/sqlfile.sql&quot;/&gt;
  &lt;formatter type=&quot;plain&quot; outfile=&quot;path/to/output.txt&quot;/&gt;
  &lt;/pdosqlexec&gt;
</pre>
	<p>
		<strong>Note:</strong> because of backwards compatiblity, the
		PDOSQLExecTask can also be called using the <em>'pdo'</em> statement.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>url</td>
				<td>String</td>
				<td>PDO connection URL (DSN)</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>userid</td>
				<td>String</td>
				<td>Username for connection (if it cannot be specified in URL)
				</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>The password to use for the connection (if it cannot be
					specified in URL)</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<!--        <tr>
          <td>encoding</td>
          <td>String</td>
          <td>The database encoding.</td>
          <td>none</td>
          <td>No</td>
        </tr> -->
			<tr>
				<td>src</td>
				<td>File</td>
				<td>A single source file of SQL statements to execute.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>onerror</td>
				<td>String</td>
				<td>The action to perform on error (continue, stop, or abort)</td>
				<td>abort</td>
				<td>No</td>
			</tr>
			<tr>
				<td>delimiter</td>
				<td>String</td>
				<td>The delimeter to separate SQL statements (e.g.
					&quot;GO&quot; in MSSQL)</td>
				<td>;</td>
				<td>No</td>
			</tr>
			<tr>
				<td>delimitertype</td>
				<td>String</td>
				<td>The delimiter type (&quot;normal&quot; or &quot;row&quot;).
					Normal means that any occurence of the delimiter terminate the SQL
					command whereas with row, only a line containing just the delimiter
					is recognized as the end of the command.</td>
				<td>normal</td>
				<td>No</td>
			</tr>
			<tr>
				<td>autocommit</td>
				<td>Boolean</td>
				<td>Whether to autocommit every single statement.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>transaction
			<p>Wrapper for a single transaction. Transactions allow several
				files or blocks of statements to be executed using the same PDO
				connection and commit operation in between.</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>tsrcfile</td>
						<td>String</td>
						<td>File with statements to be run as one transaction</td>
						<td>n/a</td>
						<td>No</td>
					</tr>
				</tbody>
			</table>
		</li>
		<li>fileset
			<p>Files containing SQL statements.</p></li>
		<li>filelist
			<p>Files containing SQL statements.</p></li>
		<li>formatter
			<p>
				The results of any queries that are executed can be printed in
				different formats. Output will always be sent to a file, unless you
				set the <em>usefile</em> attribute to <em>false</em>. The path to
				the output file file can be specified by the <em>outfile</em>
				attribute; there is a default filename that will be returned by the
				formatter if no output file is specified.
			</p>
			<p>There are three predefined formatters - one prints the query
				results in XML format, the other emits plain text. Custom formatters
				that extend phing.tasks.pdo.PDOResultFormatter can be specified.</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>Use a predefined formatter (either <em>xml</em> or <em>plain</em>).
						</td>
						<td>n/a</td>
						<td rowspan="2">One of these attributes is required.</td>
					</tr>
					<tr>
						<td>classname</td>
						<td>String</td>
						<td>Name of a custom formatter class (must extend
							phing.tasks.ext.pdo.PDOResultFormatter).</td>
						<td>n/a</td>
					</tr>
					<tr>
						<td>usefile</td>
						<td>Boolean</td>
						<td>Boolean that determines whether output should be sent to
							a file.</td>
						<td>true</td>
						<td>No</td>
					</tr>
					<tr>
						<td>outfile</td>
						<td>File</td>
						<td>Path to file in which to store result.</td>
						<td>Depends on formatter</td>
						<td>No</td>
					</tr>
					<tr>
						<td>showheaders</td>
						<td>Boolean</td>
						<td>(only applies to plain formatter) Whether to show column
							headers.</td>
						<td>false</td>
						<td>No</td>
					</tr>
					<tr>
						<td>coldelim</td>
						<td>String</td>
						<td>(only applies to plain formatter) The column delimiter.</td>
						<td>,</td>
						<td>No</td>
					</tr>
					<tr>
						<td>rowdelim</td>
						<td>String</td>
						<td>(only applies to plain formatter) The row delimiter.</td>
						<td>\n</td>
						<td>No</td>
					</tr>
					<tr>
						<td>encoding</td>
						<td>String</td>
						<td>(only applies to XML formatter) The xml document
							encoding.</td>
						<td>(PHP default)</td>
						<td>No</td>
					</tr>
					<tr>
						<td>formatoutput</td>
						<td>Boolean</td>
						<td>(only applies to XML formatter) Whether to format XML
							output.</td>
						<td>true</td>
						<td>No</td>
					</tr>
				</tbody>
			</table>
			<h3>Examples</h3> <pre>&lt;pdo url="pgsql:host=localhost dbname=test"&gt;
  &lt;fileset dir=&quot;sqlfiles&quot;&gt;
	  &lt;include name=&quot;*.sql&quot;/&gt;
  &lt;/fileset&gt;

  &lt;!-- xml formatter --&gt;
  &lt;formatter type=&quot;xml&quot; output=&quot;output.xml&quot;/&gt;

  &lt;!-- custom formatter --&gt;
  &lt;formatter classname=&quot;path.to.CustomFormatterClass&quot;&gt;
    &lt;param name=&quot;someClassAttrib&quot; value=&quot;some-value&quot;/&gt;
  &lt;/formatter&gt;

  &lt;!-- No output file + usefile=false means it goes to phing log --&gt;
  &lt;formatter type=&quot;plain&quot; usefile=&quot;false&quot; /&gt;<br />&lt;/pdo&gt;
</pre>
		</li>
	</ul>
	<h2>
		<a name="PearPackageTask"></a> PearPackageTask
	</h2>
	<p>
		With the PearPackageTask, you can create a package.xml which can be
		installed using the PEAR installer. Use this in conjunction with the <a
			href="#Tasks.TarTask">TarTask</a> to completely script the building
		of a PEAR package.
	</p>

	<p>
		<strong>Note that this task creates a <em>version 1</em>
			package.xml file.</strong>
	</p>
	<p>
		This task uses the
		<code>PEAR_PackageFileManager</code>
		class. In order to be maximally flexible, the majority of options are
		set generically (using <em>&lt;option&gt;</em> tag) and are set using
		<code>PEAR_PackageFileManager::setOptions()</code>
		. Use the <em>&lt;mapping&gt;</em> tag to represent complex values
		(which are turned into associative arrays and also set using
		<code>setOptions()</code>
		method).
	</p>
	<h3>Example</h3>
	<pre>
&lt;pearpkg name="phing" dir="${build.src.dir}" destFile="${build.base.dir}/package.xml"&gt;
&lt;fileset dir=&quot;.&quot;&gt;
&nbsp;&nbsp;&lt;include name="**"/&gt;
&lt;/fileset&gt;
&lt;option name="notes"&gt;Sample release notes here.&lt;/option&gt;
&lt;option name="description"&gt;Package description&lt;/option&gt;
&lt;option name="summary"&gt;Short description&lt;/option&gt;
&lt;option name="version" value="2.0.0b1"/&gt;
&lt;option name="state" value="beta"/&gt;
 &lt;mapping name="maintainers"&gt;
&nbsp;&nbsp;&lt;element&gt;
&nbsp;&nbsp;&nbsp;&lt;element key="handle" value="hlellelid"/&gt;
&nbsp;&nbsp;&nbsp;&lt;element key="name" value="Hans"/&gt;
&nbsp;&nbsp;&nbsp;&lt;element key="email" value="hans@xmpl.org"/&gt;
&nbsp;&nbsp;&nbsp;&lt;element key="role" value="lead"/&gt;
&nbsp;&nbsp;&lt;/element&gt;
&lt;/mapping&gt;
&lt;/pearpkg&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>name</td>
				<td>String</td>
				<td>The name of the PEAR package.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>dir</td>
				<td>String</td>
				<td>The base directory of files to add to package.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>destFile</td>
				<td>String</td>
				<td>The file to create.</td>
				<td>package.xml in base directory</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
		<li>option</li>
		<li><p>mapping</p>
			<p>
				The &lt;mapping&gt; tag represents a complex data type. You can use
				nested &lt;mapping&gt; (and nested &lt;element&gt; with
				&lt;element&gt; tags) to represent the full complexity of the
				structure. Bear in mind that what you are creating will be mapped to
				an associative array that will be passed in via
				<code>PEAR_PackageFileMaintainer::setOptions()</code>
				.
			</p> <pre>&lt;mapping name="option_name"&gt;
    &lt;element key="key_name" value="key_val"/&gt;
    &lt;element key="key_name" value="key_val"/&gt;
&lt;/mapping&gt;</pre>
		</li>
        <li>
            <p>role <br/> See <a href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addrole.php" target="_blank">PEAR_PackageFileManager::addRole</a> for more information.</p>

            <p>Available options:</p>
            <table>
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Type</th>
                        <th>Description</th>
                        <th>Default</th>
                        <th>Required</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>extension</td>
                        <td>String</td>
                        <td>The file extension</td>
                        <td>n/a</td>
                        <td>Yes</td>
                    </tr>
                    <tr>
                        <td>role</td>
                        <td>String</td>
                        <td>The file extension</td>
                        <td>n/a</td>
                        <td>Yes</td>
                    </tr>
                </tbody>
            </table>
        </li>
	</ul>

	<h2>
		<a name="PearPackage2Task"></a>PearPackage2Task
	</h2>
	<p>
		With the PearPackage2Task, you can create a <em>version 2</em>
		package.xml which can be installed using the PEAR installer. Use this
		in conjunction with the <a href="#Tasks.TarTask">TarTask</a> to
		completely script the building of a PEAR package.
	</p>
	<p>
		This task uses the PEAR_PackageFileManager2 class. In order to be
		maximally flexible, the majority of options are set generically (using
		<em>&lt;option&gt;</em> tag) and are set using
		PEAR_PackageFileManager::setOptions(). Use the <em>&lt;mapping&gt;</em>
		tag to represent complex values.
	</p>
	<p>
		Note that Travis Swicegood has created a more complete implementation
		of this functionality which can be found here: <a
			href="http://pear.domain51.com/">pear.domain51.com</a>.
	</p>
	<h3>Example</h3>
	<pre>&lt;pearpkg2 name="phing" dir="${build.src.dir}"&gt;
   &lt;option name=&quot;outputdirectory&quot; value=&quot;./build&quot;/&gt;<br />   &lt;option name=&quot;packagefile&quot; value=&quot;package2.xml&quot;/&gt;<br />   &lt;option name=&quot;packagedirectory&quot; value=&quot;./${build.dist.dir}&quot;/&gt;<br />   &lt;option name=&quot;baseinstalldir&quot; value=&quot;${pkg.prefix}&quot;/&gt;<br />   &lt;option name=&quot;channel&quot; value=&quot;my.pear-channel.com&quot;/&gt;<br />   &lt;option name=&quot;summary&quot; value=&quot;${pkg.summary}&quot;/&gt;<br />   &lt;option name=&quot;description&quot; value=&quot;${pkg.description}&quot;/&gt;<br />   &lt;option name=&quot;apiversion&quot; value=&quot;${pkg.version}&quot;/&gt;<br />   &lt;option name=&quot;apistability&quot; value=&quot;beta&quot;/&gt;<br />   &lt;option name=&quot;releaseversion&quot; value=&quot;${pkg.version}&quot;/&gt;<br />   &lt;option name=&quot;releasestability&quot; value=&quot;beta&quot;/&gt;<br />   &lt;option name=&quot;license&quot; value=&quot;none&quot;/&gt;<br />   &lt;option name=&quot;phpdep&quot; value=&quot;5.0.0&quot;/&gt;<br />   &lt;option name=&quot;pearinstallerdep&quot; value=&quot;1.4.6&quot;/&gt;<br />   &lt;option name=&quot;packagetype&quot; value=&quot;php&quot;/&gt;<br />   &lt;option name=&quot;notes&quot; value=&quot;${pkg.relnotes}&quot;/&gt;<br />   &lt;mapping name=&quot;maintainers&quot;&gt;<br />    &lt;element&gt;<br />     &lt;element key=&quot;handle&quot; value=&quot;hlellelid&quot;/&gt;<br />     &lt;element key=&quot;name&quot; value=&quot;Hans&quot;/&gt;<br />     &lt;element key=&quot;email&quot; value=&quot;hans@xmpl.org&quot;/&gt;<br />     &lt;element key=&quot;role&quot; value=&quot;lead&quot;/&gt;<br />    &lt;/element&gt;<br />   &lt;/mapping&gt;<br />&lt;/pearpkg2&gt;</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>name</td>
				<td>String</td>
				<td>The name of the PEAR package.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>dir</td>
				<td>String</td>
				<td>The base directory of files to add to package.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
		<li>
			<p>option</p>

			<p>Available options:</p>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>summary</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>description</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>license</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>channel</td>
						<td>String</td>
						<td>Channel name (not alias!). Must be registered (<code>
								pear channel-discover <em>channel</em>
							</code>) on the machine, where the build will be.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>apiversion</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>releaseversion</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>releasestability</td>
						<td>String</td>
						<td>One from: snapshot, devel, alpha, beta or stable.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>apistability</td>
						<td>String</td>
						<td>One from: devel, alpha, beta or stable.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>note</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>packagetype</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>phpdep</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>pearinstallerdep</td>
						<td>String</td>
						<td></td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table>
		</li>
		<li><p>mapping</p>
			<p>
				The &lt;mapping&gt; tag represents a complex data type. You can use
				nested &lt;mapping&gt; (and nested &lt;element&gt; with
				&lt;element&gt; tags) to represent the full complexity of the
				structure. Bear in mind that what you are creating will be mapped to
				an associative array that will be passed in via
				<code>PEAR_PackageFileMaintainer::setOptions()</code>
				.
			</p> <pre>&lt;mapping name="option_name"&gt;
    &lt;element key="key_name" value="key_val"/&gt;
    &lt;element key="key_name" value="key_val"/&gt;
&lt;/mapping&gt;</pre>

			<p>Available mappings and they structures:</p>
			<ul>
				<li>deps (optional) <br /> see <a
					href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.adddependency.php">PEAR_PackageFileManager::addDependency()</a>
					for more info <br /> <br />

					<table>
						<thead>
							<tr>
								<th>Name</th>
								<th>Type</th>
								<th>Description</th>
								<th>Default</th>
								<th>Required</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>channel</td>
								<td>String</td>
								<td>Channel name, from package is.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>name</td>
								<td>String</td>
								<td>Package name in channel.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>version</td>
								<td>String</td>
								<td>Minimal version.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>max</td>
								<td>String</td>
								<td>Maximum version.</td>
								<td>Same as version.</td>
								<td>No</td>
							</tr>
							<tr>
								<td>recommended</td>
								<td>String</td>
								<td>Recommended version.</td>
								<td>Same as version.</td>
								<td>No</td>
							</tr>
						</tbody>
					</table>
				</li>
				<li>extdeps (optional) <br /> see <a
					href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.adddependency.php">PEAR_PackageFileManager::addDependency()</a>
					for more info <br /> <br />

					<table>
						<thead>
							<tr>
								<th>Name</th>
								<th>Type</th>
								<th>Description</th>
								<th>Default</th>
								<th>Required</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>name</td>
								<td>String</td>
								<td>Package name.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>version</td>
								<td>String</td>
								<td>Minimal version.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>max</td>
								<td>String</td>
								<td>Maximum version.</td>
								<td>Same as version.</td>
								<td>No</td>
							</tr>
							<tr>
								<td>recommended</td>
								<td>String</td>
								<td>Recommended version.</td>
								<td>Same as version.</td>
								<td>No</td>
							</tr>
						</tbody>
					</table>
				</li>
				<li>maintainers (required at least one) <br /> see <a
					href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addmaintainer.php">PEAR_PackageFileManager::addMaintainer()</a>
					for more info <br /> <br />

					<table>
						<thead>
							<tr>
								<th>Name</th>
								<th>Type</th>
								<th>Description</th>
								<th>Default</th>
								<th>Required</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>handle</td>
								<td>String</td>
								<td>User identifier in channel.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>name</td>
								<td>String</td>
								<td>Real name.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>email</td>
								<td>String</td>
								<td></td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>role</td>
								<td>String</td>
								<td>One from: lead, developer, contributor or helper.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
						</tbody>
					</table>
				</li>
				<li>replacements (optional) <br /> see <a
					href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addreplacement.php">PEAR_PackageFileManager::addReplacement()</a>
					for more info <br /> <br />

					<table>
						<thead>
							<tr>
								<th>Name</th>
								<th>Type</th>
								<th>Description</th>
								<th>Default</th>
								<th>Required</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>path</td>
								<td>String</td>
								<td>Relative path of file.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>type</td>
								<td>String</td>
								<td>Variable type, either php-const, pear-config or
									package-info.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>from</td>
								<td>String</td>
								<td>Text to replace in the source file.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
							<tr>
								<td>to</td>
								<td>String</td>
								<td>Variable name to use for replacement.</td>
								<td>n/a</td>
								<td>Yes</td>
							</tr>
						</tbody>
					</table>
				</li>
			</ul>
		</li>
        <li>
            <p>role <br/> See <a href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addrole.php" target="_blank">PEAR_PackageFileManager::addRole</a> for more information.</p>

            <p>Available options:</p>
            <table>
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Type</th>
                        <th>Description</th>
                        <th>Default</th>
                        <th>Required</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>extension</td>
                        <td>String</td>
                        <td>The file extension</td>
                        <td>n/a</td>
                        <td>Yes</td>
                    </tr>
                    <tr>
                        <td>role</td>
                        <td>String</td>
                        <td>The file extension</td>
                        <td>n/a</td>
                        <td>Yes</td>
                    </tr>
                </tbody>
            </table>
        </li>
	</ul>


	<h2>
		<a name="PharPackageTask"></a>PharPackageTask
	</h2>
	<p>
		<a href="http://www.php.net/manual/en/book.phar.php" target="_blank">Phar</a>
		packages generating with Phing. This task <strong>require <a
			href="http://pecl.php.net/package/phar" target="_blank">PECL's
				Phar</a> </strong> extension to be installed on your system. Phar is built-in in
		PHP from 5.3 version.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>basedir</td>
				<td>String</td>
				<td>Base directory, which will be deleted from each included
					file (from path). Paths with deleted <em>basedir</em> part are
					local paths in package.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>destfile</td>
				<td>String</td>
				<td>Destination (output) file. Will be recreated, if exists!</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>compression</td>
				<td>String</td>
				<td>Compression type (gzip, bzip2, none) to apply to the packed
					files.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>webstub</td>
				<td>String</td>
				<td>Relative path within the phar package to run, if accessed
					through a web browser.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>clistub</td>
				<td>String</td>
				<td>Relative path within the phar package to run, if accessed
					on the command line.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>stub</td>
				<td>String</td>
				<td>A path to a php file that contains a custom stub</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>alias</td>
				<td>String</td>
				<td>An alias to assign to the phar package</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>signature</td>
				<td>String</td>
				<td>Signature algorithm (md5, sha1, sha256, sha512), used for
					this package.</td>
				<td>sha1</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
		<!--
    TODO Describe metadata element.
  -->
		<li>metadata
			<p /></li>
	</ul>
	<h3>Examples</h3>
	<p>Sample build command:</p>
	<pre>&lt;pharpackage
  destfile=&quot;./build/package.phar&quot;
  basedir=&quot;./&quot;&gt;
  &lt;fileset dir=&quot;./classes&quot;&gt;
    &lt;include name=&quot;**/**&quot; /&gt;
  &lt;/fileset&gt;
  &lt;metadata&gt;
    &lt;element name=&quot;version&quot; value=&quot;1.0&quot; /&gt;
    &lt;element name=&quot;authors&quot;&gt;
      &lt;element name=&quot;John Doe&quot;&gt;
        &lt;element name=&quot;e-mail&quot; value=&quot;john@example.com&quot; /&gt;
      &lt;/element&gt;
    &lt;/element&gt;
  &lt;/metadata&gt;
&lt;/pharpackage&gt;
</pre>
	<h2>
		<a name="PhkPackageTask"></a>PhkPackageTask
	</h2>
	<p>
		This task runs PHK_Creator.phk to build PHK-package. Learn more about
		build process in <a
			href="http://phk.tekwire.net/joomla/support/doc/builders_guide.htm"
			target="_blank">PHK Builder's Guide</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>phkcreatorpath</td>
				<td>String</td>
				<td>Path to PHK_Creator.phk.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>inputdirectory</td>
				<td>String</td>
				<td>Path to directory, that will be packed.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>outputfile</td>
				<td>String</td>
				<td>Output PHK-file. Directory, where file will be stored, must
					exist!</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>compress</td>
				<td>String</td>
				<td>Compression type (gzip, bzip2, none) to apply to the packed
					files.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>strip</td>
				<td>Boolean</td>
				<td>When true, PHP source file(s) are stripped (filtered
					through php_strip_whitespace()) before being stored into the
					archive.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>name</td>
				<td>String</td>
				<td>The package's name (Information only).</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>webrunscript</td>
				<td>String</td>
				<td>The script to run in web direct access mode. Subfile path.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>crccheck</td>
				<td>Boolean</td>
				<td>If true, a CRC check will be forced every time the package
					is mounted.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>webaccess
			<p>
				Collection of <em>path</em> tags (see example below), that will be
				visible outside package in web mode.
			</p></li>
	</ul>
	<h3>Examples</h3>
	<p>Sample build command:</p>
	<pre>&lt;phkpackage
    phkcreatorpath=&quot;/path/to/PHK_Creator.phk&quot;
    inputdirectory=&quot;src&quot;
    outputfile=&quot;build/sample-project.phk&quot;
    compress=&quot;gzip&quot;
    strip=&quot;true&quot;
    name=&quot;Sample Project&quot;
    webrunscript=&quot;index.php&quot;&gt;
    &lt;webaccess&gt;
        &lt;path&gt;/&lt;/path&gt;
    &lt;/webaccess&gt;
&lt;/phkpackage&gt;
</pre>
	<h2>
		<a name="PhpCodeSnifferTask"></a>PhpCodeSnifferTask
	</h2>
	<p>
		This task runs <a href="http://pear.php.net/package/PHP_CodeSniffer"
			target="_blank">PHP_CodeSniffer</a> to detect violations of a defined
		set of coding standards.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>standard</td>
				<td>String</td>
				<td>The name of the standard to check for.</td>
				<td>Generic</td>
				<td>No</td>
			</tr>
			<tr>
				<td>format</td>
				<td>String</td>
				<td>The output format. The <em>default</em> format is specified
					in the task itself. Additionally all report formats of
					PHP_CodeSniffer can be choosen (ex. <em>checkstyle</em>, <em>full</em>,
					<em>summary</em>, ...).</td>
				<td>default</td>
				<td>No<br />Ignored if nested <em>formatter</em> elements are
					supplied.</td>
			</tr>
			<tr>
				<td>showSniffs</td>
				<td>Boolean</td>
				<td>Print the list of used sniffs.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>showWarnings</td>
				<td>Boolean</td>
				<td>Print warnings.</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>showSources</td>
				<td>Boolean</td>
				<td>Flag that determines whether to show sources or not.</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>docGenerator</td>
				<td>String</td>
				<td>The name of the doc generator (HTML, Text).</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>docFile</td>
				<td>String</td>
				<td>Path to write output file to. If not set documentation will
					be written to STDOUT when <em>docGenerator</em> is set.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>The file or folder to check (usually the nested tag <em>fileset</em>
					is used instead).</td>
				<td>false</td>
				<td>Either this attribute or the nested tag <em>fileset</em> is
					required.</td>
			</tr>
			<tr>
				<td>sniffs</td>
				<td>String</td>
				<td>The list of allowed sniffs (separated by space, comma or
					semicolon). The sniffs must be part of the choosen standard.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>verbosity</td>
				<td>Integer</td>
				<td>The verbosity level of CodeSniffer where level 1 prints
					progress information and level 2 prints developer debug
					information.</td>
				<td>0</td>
				<td>No</td>
			</tr>
			<tr>
				<td>encoding</td>
				<td>String</td>
				<td>The encoding of the files to check</td>
				<td>iso-8859-1</td>
				<td>No</td>
			</tr>
			<tr>
				<td>tabWidth</td>
				<td>Integer</td>
				<td>Replaces tabs with the given number of spaces. If zero no
					replacing is done.</td>
				<td>0</td>
				<td>No</td>
			</tr>
			<tr>
				<td>reportWidth</td>
				<td>Integer</td>
				<td>The max. width for the report.</td>
				<td>80</td>
				<td>No</td>
			</tr>
			<tr>
				<td>allowedFileExtensions</td>
				<td>String</td>
				<td>The allowed file extensions (separated by space, comma or
					semicolon) when a directory is specified in the <em>file</em>
					attribute.</td>
				<td>php</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignorePatterns</td>
				<td>String</td>
				<td>The patterns to ignore files and folders (separated by
					space, comma or semicolon) when a directory is specified in the <em>file</em>
					attribute.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>noSubdirectories</td>
				<td>Boolean</td>
				<td>Do not recurse into subdirectories when a directory is
					specified in the <em>file</em> attribute.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonerror</td>
				<td>Boolean</td>
				<td>Stop the build process if errors occurred during during the
					run.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonwarning</td>
				<td>Boolean</td>
				<td>Stop the build process if warnings occurred during the run.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>skipversioncheck</td>
				<td>Boolean</td>
				<td>Skips the version check when the task starts.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset
			<p>
				Either this nested tag or the attribute <em>file</em> is required.
			</p></li>
		<li>config
			<p>The configuration parameters which are usually loaded from the
				CodeSniffer.conf can be set.</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>name</td>
						<td>String</td>
						<td>Name of the configuration parameter.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>value</td>
						<td>String</td>
						<td>Value of the configuration parameter.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table></li>
		<li>formatter
			<p>
				The results of the tests can be printed in different formats. Output
				will always be sent to a file, unless you set the <em>usefile</em>
				attribute to <em>false.</em>
			</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>The output format. Accepts the the same values as the <em>format</em>
							attribute (<em>default</em>, <em>xml</em>, <em>checkstyle</em>, <em>csv</em>,
							<em>report</em>, <em>summary</em> &amp; <em>doc</em>).</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>usefile</td>
						<td>Boolean</td>
						<td>Boolean that determines whether output should be sent to
							a file.</td>
						<td>true</td>
						<td>No</td>
					</tr>
					<tr>
						<td>outfile</td>
						<td>String</td>
						<td>Path to write output file to.</td>
						<td>n/a</td>
						<td>Yes, if <em>usefile</em> is <em>true</em>.</td>
					</tr>
				</tbody>
			</table></li>
	</ul>
	<h3>Examples</h3>
	<p>
		Checks all files in the directory <em>file</em> matching the allowed
		file extension with the <em>PEAR</em> standard and prints the <em>summary</em>
		report without warnings.
	</p>
	<pre>&lt;phpcodesniffer
  standard=&quot;PEAR&quot;
  format=&quot;summary&quot;
  file=&quot;/path/to/source-files&quot;
  allowedFileExtensions=&quot;php php5 inc&quot;/&gt;
</pre>
	<p>
		Checks all matching files in the <em>fileset</em> with the <em>Zend</em>
		standard, sets the <em>zend_ca_path</em> configuration which may be
		required by one of the sniffs, prints a list of used sniffs and prints
		the <em>default</em> report with warnings and the <em>checkstyle</em>
		report to <em>/path/to/checkstyle.xml</em>.
	</p>
	<pre>&lt;phpcodesniffer
  standard=&quot;Zend&quot;
  showSniffs=&quot;true&quot;
  showWarnings=&quot;true&quot;&gt;
  &lt;fileset dir=&quot;/path/to/source-files&quot;&gt;
    &lt;include name=&quot;**/*.php&quot;/&gt;
  &lt;/fileset&gt;
  &lt;config name=&quot;zend_ca_path&quot; value=&quot;/path/to/ZendStudio/bin/ZendCodeAnalyzer&quot;/&gt;
  &lt;formatter type=&quot;default&quot; usefile=&quot;false&quot;/&gt;
  &lt;formatter type=&quot;checkstyle&quot; outfile=&quot;/path/to/checkstyle.xml&quot;/&gt;
&lt;/phpcodesniffer&gt;
</pre>
	<p>
		Checks all files in the directory <em>file</em> with the <em>PEAR</em>
		standard and prints the <em>checkstyle</em> report without warnings.
		It also generates the documentation for the selected coding standard
		and writes it to the given file.
	</p>
	<pre>&lt;phpcodesniffer
  standard=&quot;PEAR&quot;
  file=&quot;/path/to/source-files&quot;
  docGenerator=&quot;HTML&quot;
  docFile=&quot;/path/to/doc.html&quot;&gt;
  &lt;formatter type=&quot;checkstyle&quot; outfile=&quot;/path/to/checkstyle.xml&quot;/&gt;
&lt;/phpcodesniffer&gt;
</pre>

	<h2>
		<a name="PHPCPDTask"></a>PHPCPDTask
	</h2>
	<p>
		This task runs <a href="http://github.com/sebastianbergmann/phpcpd/"
			target="_blank">phpcpd</a>, a Copy/Paste Detector (CPD) for PHP Code.
		You need an installed version of this software to use this task.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Path to source file or path</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>minTokens</td>
				<td>Integer</td>
				<td>Sets the minimum number of identical tokens (default: 70)</td>
				<td>70</td>
				<td>No</td>
			</tr>
			<tr>
				<td>minLines</td>
				<td>Integer</td>
				<td>Sets the minimum number of identical lines (default: 5)</td>
				<td>5</td>
				<td>No</td>
			</tr>
			<tr>
				<td>format</td>
				<td>String</td>
				<td>The format for the report when no nested formatter is used.</td>
				<td>default</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset
			<p>
				This nested tag is required when the <em>file</em> attribute is not
				set.
			</p></li>
		<li>formatter
			<p>
				The results of the copy/paste scan can be printed in different
				formats. Output will always be sent to a file, unless you set the <em>usefile</em>
				attribute to <em>false</em>.
			</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>The output format. Accepts the the same values as the <em>format</em>
							attribute (<em>default</em>, <em>pmd</em>).</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>useFile</td>
						<td>Boolean</td>
						<td>Flag that determines whether output should be sent to a
							file or not.</td>
						<td>true</td>
						<td>No</td>
					</tr>
					<tr>
						<td>outfile</td>
						<td>String</td>
						<td>Path to write output file to.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table></li>
	</ul>
	<h3>Examples</h3>
	<pre>
 &lt;phpcpd file="path/to/source.php"/&gt;
</pre>
	<p>Checking for copy/paste code in one particular source file.
		Sending Default-Report to STDOUT.</p>
	<pre>
 &lt;phpcpd file="path/to/source"&gt;
   &lt;formatter type=&quot;pmd&quot; outfile=&quot;reports/pmd-cpd.xml&quot;/&gt;
 &lt;/phpcpd&gt;
</pre>
	<p>Checking for copy/paste code in files of the given path.</p>
	<pre>
 &lt;phpcpd&gt;
   &lt;fileset dir=&quot;${builddir}&quot; id=&quot;filestocpd&quot;&gt;
     &lt;include name=&quot;apps/**/*.php&quot; /&gt;
     &lt;include name=&quot;lib/de/**/*.php&quot; /&gt;
     &lt;include name=&quot;lib/task/**/*.php&quot; /&gt;
     &lt;include name=&quot;lib/services/**/*.php&quot; /&gt;
     &lt;include name=&quot;lib/form/**/*.php&quot; /&gt;
     &lt;include name=&quot;lib/model/**/*.php&quot; /&gt;
   &lt;/fileset&gt;
   &lt;formatter type=&quot;pmd&quot; outfile=&quot;reports/pmd-cpd.xml&quot;/&gt;
 &lt;/phpcpd&gt;
</pre>

	<h2>
		<a name="PHPMDTask"></a>PHPMDTask
	</h2>
	<p>
		This task runs <a href="http://phpmd.org" target="_blank">phpmd</a>, a
		Project Mess Detector (PMD) for PHP Code. You need an installed
		version of this software to use this task.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Path to source file or path</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>rulesets</td>
				<td>String</td>
				<td>Sets the rulesets used for analyzing the source code</td>
				<td>codesize,unusedcode</td>
				<td>No</td>
			</tr>
			<tr>
				<td>minimumPriority</td>
				<td>Integer</td>
				<td>The minimum priority for rules to load.</td>
				<td>5</td>
				<td>No</td>
			</tr>
			<tr>
				<td>allowedFileExtensions</td>
				<td>String</td>
				<td>Comma-separated list of valid file extensions (without dot)
					for analyzed files.</td>
				<td>php</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignorePatterns</td>
				<td>String</td>
				<td>Comma-separated list of directory patterns to ignore.</td>
				<td>.git,.svn,CVS,.bzr,.hg</td>
				<td>No</td>
			</tr>
			<tr>
				<td>format</td>
				<td>String</td>
				<td>The format for the report when no nested formatter is used.</td>
				<td>text</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset
			<p>
				This nested tag is required when the <em>file</em> attribute is not
				set.
			</p></li>
		<li>formatter
			<p>
				The results of the analysis can be printed in different formats.
				Output will always be sent to STDOUT, unless you set the <em>usefile</em>
				attribute to <em>true</em> and set an filename in the <em>outfile</em>
				attribute.
			</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>The output format. Accepts the the same values as the <em>format</em>
							attribute (<em>xml</em>, <em>html</em>, <em>text</em>).</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>usefile</td>
						<td>Boolean</td>
						<td>Boolean that determines whether output should be sent to
							a file.</td>
						<td>true</td>
						<td>No</td>
					</tr>
					<tr>
						<td>outfile</td>
						<td>String</td>
						<td>Path to write output file to.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table></li>
	</ul>
	<h3>Examples</h3>
	<pre>
 &lt;phpmd file="path/to/source.php"/&gt;
</pre>
	<p>Checking syntax of one particular source file. Sending
		Text-Report to STDOUT.</p>
	<pre>
 &lt;phpmd file="path/to/source"&gt;
   &lt;formatter type=&quot;html&quot; outfile=&quot;reports/pmd.html&quot;/&gt;
 &lt;/phpmd&gt;
</pre>
	<p>Checking syntax of source files in the given path.</p>
	<pre>
 &lt;phpmd&gt;
   &lt;fileset dir=&quot;${builddir}&quot;&gt;
     &lt;include name=&quot;apps/**/*.php&quot; /&gt;
     &lt;include name=&quot;lib/de/**/*.php&quot; /&gt;
   &lt;/fileset&gt;
   &lt;formatter type=&quot;xml&quot; outfile=&quot;reports/pmd.xml&quot;/&gt;
 &lt;/phpmd&gt;
</pre>
	<p>Checking syntax of source files in the fileset pathes.</p>

	<h2>
		<a name="PhpDependTask"></a>PhpDependTask
	</h2>
	<p>
		This task runs <a href="http://pdepend.org" target="_blank">PHP_Depend</a>,
		a software analyzer and metric tool for PHP Code. You need an
		installed version of this software to use this task.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Path to source file or path</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>configFile</td>
				<td>String</td>
				<td>Path to PHP_Depend configuration file</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>allowedFileExtensions</td>
				<td>String</td>
				<td>Comma-separated list of valid file extensions (without dot)
					for analyzed files.</td>
				<td>php,php5</td>
				<td>No</td>
			</tr>
			<tr>
				<td>excludeDirectories</td>
				<td>String</td>
				<td>Comma-separated list of directory patterns to ignore.</td>
				<td>.git,.svn,CVS</td>
				<td>No</td>
			</tr>
			<tr>
				<td>excludePackages</td>
				<td>String</td>
				<td>Comma-separated list of packages to ignore.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>withoutAnnotations</td>
				<td>Boolean</td>
				<td>Should the parse ignore doc comment annotations?</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>supportBadDocumentation</td>
				<td>Boolean</td>
				<td>Should PHP_Depend treat <b>+global</b> as a regular project
					package?</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>debug</td>
				<td>Boolean</td>
				<td>Enable debug output?</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonerror</td>
				<td>Boolean</td>
				<td>Stop the build process if errors occurred during the run.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset
			<p>
				This nested tag is required when the <em>file</em> attribute is not
				set.
			</p></li>
		<li>logger
			<p>The results of the analysis can be parsed by differed loggers.
				At least one logger is required. Output will always be sent to a
				file.</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>The name of the logger. Valid loggers are: <em>jdepend-chart</em>,
							<em>jdepend-xml</em>, <em>overview-pyramid</em>, <em>phpunit-xml</em>
							and <em>summary-xml</em>.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>outfile</td>
						<td>String</td>
						<td>Path to write output file to.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table></li>
		<li>analyzer
			<p>Some additional analyzers can be added to the runner.</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>The name of the analyzer. Valid analyzers are: <em>coderank-mode</em>.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
					<tr>
						<td>value</td>
						<td>String</td>
						<td>The value for the analyzer.</td>
						<td>n/a</td>
						<td>Yes</td>
					</tr>
				</tbody>
			</table></li>
	</ul>
	<h3>Examples</h3>
	<pre>
 &lt;phpdepend file="path/to/source"&gt;
   &lt;logger type=&quot;phpunit-xml&quot; outfile=&quot;reports/metrics.xml&quot;/&gt;
 &lt;/phpdepend&gt;
</pre>
	<p>Running code analysis for source files in the given path.</p>
	<pre>
 &lt;phpdepend&gt;
   &lt;fileset dir=&quot;${builddir}&quot;&gt;
     &lt;include name=&quot;apps/**/*.php&quot; /&gt;
     &lt;include name=&quot;lib/de/**/*.php&quot; /&gt;
   &lt;/fileset&gt;
   &lt;logger type=&quot;jdepend-xml&quot; outfile=&quot;reports/jdepend.xml&quot;/&gt;
   &lt;analyzer type=&quot;coderank-mode&quot; value=&quot;method&quot;/&gt;
 &lt;/phpdepend&gt;
</pre>
	<p>
		Running code analysis for source files in the fileset pathes with
		CodeRank strategy <em>method</em>.
	</p>

	<h2>
		<a name="PhpDocumentorTask"></a>PhpDocumentorTask
	</h2>
	<p>
		This task runs <a href="http://www.phpdoc.org/" target="_blank">phpDocumentor</a>,
		an auto-documentation tool for PHP similar to Javadoc.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>title</td>
				<td>String</td>
				<td>Title for browser window / package index.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>destdir</td>
				<td>String</td>
				<td>Destination directory for output files.</td>
				<td>n/a</td>
				<td rowspan="2">Yes</td>
			</tr>
			<tr>
				<td>target</td>
				<td>String</td>
				<td>Alias of <em>destdir</em> ("target" is config param used by
					PhpDocumentor)</td>
				<td>n/a</td>
			</tr>
			<tr>
				<td>output</td>
				<td>String</td>
				<td>Output format (such as <em>HTML:Smarty:PHP</em>).</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>sourcecode</td>
				<td>Boolean</td>
				<td>Generate syntax-highlighted sourcecode file for each file
					parsed?</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>examplesdir</td>
				<td>String</td>
				<td>Path to directory in which to look for example
					documentation.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>parseprivate</td>
				<td>Boolean</td>
				<td>Parse @internal and elements marked private.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>javadocdesc</td>
				<td>Boolean</td>
				<td>JavaDoc-compliant description parsing. Use on/off, default
					off (more flexibility)</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>quiet</td>
				<td>Boolean</td>
				<td>Suppress output to STDOUT.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>packageoutput</td>
				<td>String</td>
				<td>Output documentation only for selected packages. Use a
					comma-delimited list</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignoretags</td>
				<td>String</td>
				<td>Comma-separated list of tags to ignore (@package,
					@subpackage, @access and @ignore may not be ignored).</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>defaultpackagename</td>
				<td>String</td>
				<td>name to use for the default package. If not specified, uses
					'default'</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>defaultcategoryname</td>
				<td>String</td>
				<td>name to use for the default category. If not specified,
					uses 'default'</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>pear</td>
				<td>Boolean</td>
				<td>Treat parse dirs as PEAR repository? (package is directory,
					_members are @access private)</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>templatebase</td>
				<td>String</td>
				<td>Set base dirctory of all templates for this parse.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>undocumentedelements</td>
				<td>Boolean</td>
				<td>Control whether or not warnings will be shown for
					undocumented elements. Useful for identifying classes and methods
					that haven't yet been documented.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>customtags</td>
				<td>Boolean</td>
				<td>Custom tags, will be recognized and put in tags[] instead
					of unknowntags[].</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignore</td>
				<td>String</td>
				<td>List of files to ignore, separated by ','.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset - Files that should be included for parsing</li>
		<li>projdocfileset - Files that should be treated as
			README/INSTALL/CHANGELOG files</li>
	</ul>
	<h3>Examples</h3>
	<pre>
&lt;phpdoc title=&quot;API Documentation&quot;
  destdir=&quot;apidocs&quot;
  sourcecode=&quot;false&quot;
  output=&quot;HTML:Smarty:PHP&quot;&gt;
   &lt;fileset dir=&quot;./classes&quot;&gt;
      &lt;include name=&quot;**/*.php&quot; /&gt;
   &lt;/fileset&gt;
   &lt;projdocfileset dir=&quot;.&quot;&gt;
      &lt;include name=&quot;README&quot; /&gt;
      &lt;include name=&quot;INSTALL&quot; /&gt;
      &lt;include name=&quot;CHANGELOG&quot; /&gt;
   &lt;/projdocfileset&gt;
&lt;/phpdoc&gt;
</pre>
	<h2>
		<a name="PhpDocumentorExternalTask"></a>PhpDocumentorExternalTask
	</h2>
	<p>
		This is the same as the <a href="#PhpDocumentorTask">PhpDocumentorTask</a>
		but uses the command line application. Use this as a fallback in case
		you're running into troubles when using the phpDocumentor-library with
		the PhpDocumentorTask directly, e.g. when you're using Smarty and have
		Smarty in your library path too.
	</p>
	<p>This task supports everything the PhpDocumentorTask supports,
		differences are documented below.</p>
	<h3>Additional attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>programpath</td>
				<td>String</td>
				<td>Path to the phpdoc executable (relative or absolute).</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>sourcepath</td>
				<td>String</td>
				<td>A directory to scan for parsable files. Supports multiple
					directories separated with a comma.</td>
				<td>n/a</td>
				<td>Yes, if no <tt>&lt;fileset&gt;</tt> is given</td>
			</tr>
		</tbody>
	</table>
	<h3>Unsupported attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Description</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>configdir</td>
				<td>Currently not supported. The attribute will be ignored and
					a warning messag will be generated. The build continues (to ease
					when changing an existing phpdoc task) however this may have
					unexpected side effects.</td>
			</tr>
		</tbody>
	</table>
	<h3>Examples</h3>
	<pre>
&lt;phpdocext title=&quot;API Documentation&quot;
  programpath=&quot;/usr/bin/phpdoc&quot;
  destdir=&quot;apidocs&quot;
  sourcecode=&quot;false&quot;
  output=&quot;HTML:Smarty:PHP&quot;&gt;
   &lt;fileset dir=&quot;./classes&quot;&gt;
      &lt;include name=&quot;**/*.php&quot; /&gt;
   &lt;/fileset&gt;
   &lt;projdocfileset dir=&quot;.&quot;&gt;
      &lt;include name=&quot;README&quot; /&gt;
      &lt;include name=&quot;INSTALL&quot; /&gt;
      &lt;include name=&quot;CHANGELOG&quot; /&gt;
   &lt;/projdocfileset&gt;
&lt;/phpdocext&gt;
</pre>

	<h2>
		<a name="PhpLintTask"></a>PhpLintTask
	</h2>
	<p>
		The <em>PhpLintTask</em> checks syntax (lint) on one or more PHP
		source code files.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Path to source file</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonfailure</td>
				<td>Boolean</td>
				<td>Stop the build process if the linting process encounters an
					error.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>errorproperty</td>
				<td>String</td>
				<td>The name of a property that will be set to contain the
					error string (if any).</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>interpreter</td>
				<td>string</td>
				<td>Path to alternative PHP interpreter</td>
				<td>Defaults to the <tt>${php.command}</tt> property which is
					the interpreter used to execute phing itself.</td>
				<td>No</td>
			</tr>
			<tr>
				<td>cachefile</td>
				<td>String</td>
				<td>If set, enables writing of last-modified times to <em>cachefile</em>,
					to speed up processing of files that rarely change</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>level</td>
				<td>String</td>
				<td>Control the level at which phplint reports status messages.
					One of <em>error</em>, <em>warning</em>, <em>info</em>, <em>verbose</em>,
					<em>debug</em>.</td>
				<td><em>info</em></td>
				<td>No</td>
			</tr>
			<tr>
				<td>tofile</td>
				<td>String</td>
				<td>File to write list of 'bad files' to.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>deprecatedAsError</td>
				<td>Boolean</td>
				<td>Whether to treat deprecated warnings (introduced in PHP
					5.3) as errors.</td>
				<td>n/a</td>
				<td>false</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;phplint file=&quot;path/to/source.php&quot;/&gt;
</pre>
	<p>Checking syntax of one particular source file.</p>
	<pre>
&lt;phplint&gt;
&nbsp;&nbsp;&lt;fileset dir=&quot;src&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*.php"/&gt;
&nbsp;&nbsp;&lt;/fileset&gt;
&lt;/phplint&gt;
</pre>
	<p>Check syntax of a fileset of source files.</p>
	<h2>
		<a name="PHPUnitTask"></a>PHPUnitTask
	</h2>
	<p>
		This task runs testcases using the <a href="http://www.phpunit.de/"
			target="_blank">PHPUnit</a> framework. It is a functional port of the
		Ant <a href="http://ant.apache.org/manual/OptionalTasks/junit.html"
			target="_blank">JUnit</a> task.
	</p>
	<p>
		<b>NB:</b> the identifiers <i>phpunit2</i> (PHPUnit2Task) and <i>phpunit3</i>
		(PHPUnit3Task) have been deprecated!
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>printsummary</td>
				<td>Boolean</td>
				<td>Print one-line statistics for each testcase.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>bootstrap</td>
				<td>string</td>
				<td>The name of a bootstrap file that is run before executing
					the tests.</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>codecoverage</td>
				<td>Boolean</td>
				<td>Gather code coverage information while running tests
					(requires Xdebug).</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonerror</td>
				<td>Boolean</td>
				<td>Stop the build process if an error occurs during the test
					run.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonfailure</td>
				<td>Boolean</td>
				<td>Stop the build process if a test fails (errors are
					considered failures as well).</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonincomplete</td>
				<td>Boolean</td>
				<td>Stop the build process if any incomplete tests are
					encountered.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonskipped</td>
				<td>Boolean</td>
				<td>Stop the build process if any skipped tests are
					encountered.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>failureproperty</td>
				<td>String</td>
				<td>Name of property to set (to true) on failure.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>errorproperty</td>
				<td>String</td>
				<td>Name of property to set (to true) on error.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>incompleteproperty</td>
				<td>String</td>
				<td>Name of property to set (to true) on incomplete tests.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>skippedproperty</td>
				<td>String</td>
				<td>Name of property to set (to true) on skipped tests.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>usecustomerrorhandler</td>
				<td>Boolean</td>
				<td>Use a custom Phing/PHPUnit error handler to process PHP
					errors.</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>processisolation</td>
				<td>Boolean</td>
				<td>Enable process isolation when executing
				tests.</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>formatter
			<p>
				The results of the tests can be printed in different formats. Output
				will always be sent to a file, unless you set the <em>usefile</em>
				attribute to <em>false</em>. The name of the file is predetermined
				by the formatter and can be changed by the <em>outfile</em>
				attribute.
			</p>
			<p>
				There are four predefined formatters - <em>xml</em> and <em>clover</em>
				print the test results in the JUnit and Clover XML formats, the
				other two emit plain text. The <em>brief</em> formatter will only
				print detailed information for testcases that failed, while <em>plain</em>
				emits a short statistics line for all test cases. Custom formatters
				that implement
				phing.tasks.ext.phpunit.formatter.PHPUnitResultFormatter can be
				specified.
			</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>Use a predefined formatter (either <em>xml</em>, <em>plain</em>,
							<em>clover</em>, or <em>brief</em>).</td>
						<td>n/a</td>
						<td rowspan="2">One of these is required.</td>
					</tr>
					<tr>
						<td>classname</td>
						<td>String</td>
						<td>Name of a custom formatter class.</td>
						<td>n/a</td>
					</tr>
					<tr>
						<td>usefile</td>
						<td>Boolean</td>
						<td>Boolean that determines whether output should be sent to
							a file.</td>
						<td>true</td>
						<td>No</td>
					</tr>
					<tr>
						<td>todir</td>
						<td>String</td>
						<td>Directory to write the file to.</td>
						<td>n/a</td>
						<td>No</td>
					</tr>
					<tr>
						<td>outfile</td>
						<td>String</td>
						<td>Filename of the result.</td>
						<td>Depends on formatter</td>
						<td>No</td>
					</tr>
				</tbody>
			</table></li>
		<li>batchtest
			<p>
				Define a number of tests based on pattern matching. <em>batchtest</em>
				collects the included files from any number of nested
				&lt;fileset&gt;s. It then generates a lists of classes that are
				(in)directly defined by each PHP file.
			</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>exclude</td>
						<td>String</td>
						<td>A list of classes to exclude from the pattern matching.
							For example, when you have two baseclasses <em>BaseWebTest</em>
							and <em>BaseMathTest</em>, which are included a number of
							testcases (and thus added to the list of testclasses), you can
							exclude those classes from the list by typing <em>exclude=&quot;BaseWebTest
								BaseMathTest&quot;</em>.</td>
						<td>n/a</td>
						<td>No</td>
					</tr>
					<tr>
						<td>classpath</td>
						<td>String</td>
						<td>Used to define more paths on which - besides the PHP
							include_path - to look for the test files.</td>
						<td>n/a</td>
						<td>No</td>
					</tr>
					<tr>
						<td>name</td>
						<td>String</td>
						<td>The name that is used to create a testsuite from this
							batchtest.</td>
						<td>Phing Batchtest</td>
						<td>No</td>
					</tr>
				</tbody>
			</table>
			<h3>Supported Nested Tags</h3>
			<ul>
				<li>fileset</li>
			</ul></li>
	</ul>
	<h3>Examples</h3>
	<pre>&lt;phpunit&gt;
  &lt;formatter todir=&quot;reports&quot; type=&quot;xml&quot;/&gt;
  &lt;batchtest&gt;
    &lt;fileset dir=&quot;tests&quot;&gt;
      &lt;include name=&quot;**/*Test*.php&quot;/&gt;
      &lt;exclude name=&quot;**/Abstract*.php&quot;/&gt;
    &lt;/fileset&gt;
  &lt;/batchtest&gt;
&lt;/phpunit&gt;
</pre>
	<p>
		Runs all matching testcases in the directory <em>tests</em>, writing
		XML results to the directory <em>reports</em>.
	</p>
	<pre>&lt;phpunit codecoverage=&quot;true&quot; haltonfailure=&quot;true&quot; haltonerror=&quot;true&quot;&gt;
  &lt;formatter type=&quot;plain&quot; usefile=&quot;false&quot;/&gt;
  &lt;batchtest&gt;
    &lt;fileset dir=&quot;tests&quot;&gt;
      &lt;include name=&quot;**/*Test*.php&quot;/&gt;
    &lt;/fileset&gt;
  &lt;/batchtest&gt;
&lt;/phpunit&gt;
</pre>
	<p>
		Runs all matching testcases in the directory <em>tests</em>, gathers
		code coverage information, writing plain text results to the console.
		The build process is aborted if a test fails.
	</p>
	<pre>&lt;phpunit bootstrap=&quot;src/autoload.php&quot;&gt;
  &lt;formatter type=&quot;plain&quot; usefile=&quot;false&quot;/&gt;
  &lt;batchtest&gt;
    &lt;fileset dir=&quot;tests&quot;&gt;
      &lt;include name=&quot;**/*Test*.php&quot;/&gt;
    &lt;/fileset&gt;
  &lt;/batchtest&gt;
&lt;/phpunit&gt;
</pre>
	<p>
		Runs all matching testcases in the directory <em>tests</em>, writing
		plain text results to the console. Additionally, before executing the
		tests, the bootstrap file <em>src/autoload.php</em> is loaded.
	</p>
	<p>
		<b>Important note:</b> using a mechanism such as an "AllTests.php"
		file to execute testcases will bypass the Phing hooks used for
		reporting and counting, and could possibly lead to strange results.
		Instead, use one of more fileset's to provide a list of testcases to
		execute.
	</p>
	<h2>
		<a name="PHPUnitReport"></a>PHPUnitReport
	</h2>
	<p>This task transforms PHPUnit xml reports to HTML using XSLT.</p>
	<p>
		<b>NB:</b> the identifiers <i>phpunit2report</i> (PHPUnit2Report) and
		<i>phpunit3report</i> (PHPUnit3Report)have been deprecated!
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>infile</td>
				<td>String</td>
				<td>The filename of the XML results file to use.</td>
				<td>testsuites.xml</td>
				<td>No</td>
			</tr>
			<tr>
				<td>format</td>
				<td>String</td>
				<td>The format of the generated report. Must be <em>noframes</em>
					or <em>frames</em>.</td>
				<td>noframes</td>
				<td>No</td>
			</tr>
			<tr>
				<td>styledir</td>
				<td>String</td>
				<td>The directory where the stylesheets are located. They must
					conform to the following conventions:
					<ul>
						<li>frames format: the stylesheet must be named
							phpunit-frames.xsl.</li>
						<li>noframes format: the stylesheet must be named
							phpunit-noframes.xsl.</li>
					</ul>
					
					If unspecified, the task will look for the stylesheet(s) in 
					the following directories: the PHP include path, the Phing
					home directory and the PEAR data directory (if applicable). 
					</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>An existing directory where the files resulting from the
					transformation should be written to.</td>
				<td />
				<td>Yes</td>
			</tr>
			<tr>
				<td>usesorttable</td>
				<td>boolean</td>
				<td>Whether to use the sorttable JavaScript library (see <a
					href="http://www.kryogenix.org/code/browser/sorttable/">http://www.kryogenix.org/code/browser/sorttable/</a>)</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Examples</h3>
	<pre>&lt;phpunitreport infile=&quot;reports/testsuites.xml&quot; 
    format=&quot;frames&quot; 
    todir=&quot;reports/tests&quot; 
    styledir=&quot;/home/phing/etc&quot;/&gt;
</pre>
	<p>
		Generates a framed report in the directory <em>reports/tests</em>
		using the file <em>reports/testsuites.xml</em> as input.
	</p>
	<p>
		<b>Important note:</b> testclasses that are not explicitly placed in a
		package (by using a '@package' tag in the class-level DocBlock) are
		listed under the "default" package.
	</p>

    <h2>
        <a name="rSTTask"></a>rSTTask
    </h2>
    <p>
        Renders rST (reStructuredText) files into different output formats.
    </p>
    <p>
        This task requires the <em>python docutils</em> installed. They contain
        <cite>rst2html</cite>, <cite>rst2latex</cite>, <cite>rst2man</cite>,
        <cite>rst2odt</cite>, <cite>rst2s5</cite>, <cite>rst2xml</cite>.
    </p>
    <p>
        Homepage: <a href="https://gitorious.org/phing/rsttask">https://gitorious.org/phing/rsttask</a>
    </p>
    <h3>Features</h3>
    <ul>
        <li>renders single files</li>
        <li>render nested filesets</li>
        <li>mappers to generate output file names based on the rst ones</li>
        <li>multiple output formats</li>
        <li>filter chains to e.g. replace variables after rendering</li>
        <li>custom parameters to the rst2* tool</li>
        <li>configurable rst tool path</li>
        <li>uptodate check</li>
        <li>automatically overwrites old files</li>
        <li>automatically creates target directories</li>
    </ul>
            
    <h3>Attributes</h3>
    <table>
        <thead>
            <tr>
                <th>Name</th>
                <th>Type</th>
                <th>Description</th>
                <th>Default</th>
                <th>Required</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>file</td>
                <td>String</td>
                <td>rST input file to render</td>
                <td>n/a</td>
                <td>Yes (or fileset)</td>
            </tr>
            <tr>
                <td>format</td>
                <td>String</td>
                <td><p>Output format:</p>
                    <ul>
                        <li>html</li>
                        <li>latex</li>
                        <li>man</li>
                        <li>odt</li>
                        <li>s5</li>
                        <li>xml</li>
                    </ul></td>
                <td>html</td>
                <td>No</td>
            </tr>
            <tr>
                <td>destination</td>
                <td>String</td>
                <td>Path to store the rendered file to. Used as directory if
                    it ends with a <em>/</em>.</td>
                <td>magically determined from input file</td>
                <td>No</td>
            </tr>
            <tr>
                <td>uptodate</td>
                <td>Boolean</td>
                <td>Only render if the input file is newer than the target
                    file</td>
                <td>false</td>
                <td>No</td>
            </tr>
            <tr>
                <td>toolpath</td>
                <td>String</td>
                <td>Path to the rst2* tool</td>
                <td>determined from <em>format</em></td>
                <td>No</td>
            </tr>
            <tr>
                <td>toolparam</td>
                <td>String</td>
                <td>Additional commandline parameters to the rst2* tool</td>
                <td>n/a</td>
                <td>No</td>
            </tr>
        </tbody>
    </table>
    <h3>Supported Nested Tags</h3>
    <ul>
        <li>fileset</li>
        <li>mapper</li>
        <li>filterchain</li>
    </ul>
    <h3>Examples</h3>
    <h4>
        Render a single rST file to HTML
    </h4>
    <p>By default, HTML is generated. If no target file is
        specified, the input file name is taken, and its extension replaced
        with the correct one for the output format.</p>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;single&quot;&gt;
  &lt;target name=&quot;single&quot; description=&quot;render a single rST file to HTML&quot;&gt;

    &lt;rST file=&quot;path/to/file.rst&quot; /&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>
    <h4>
        Render a single rST file to any supported format
    </h4>
    <p>
        The <em>format</em>
        attribute determines the output format:
    </p>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;single&quot;&gt;
  &lt;target name=&quot;single&quot; description=&quot;render a single rST file to S5 HTML&quot;&gt;

    &lt;rST file=&quot;path/to/file.rst&quot; format=&quot;s5&quot; /&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>
    <h4>
        Specifying the output file name
    </h4>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;single&quot;&gt;
  &lt;target name=&quot;single&quot; description=&quot;render a single rST file&quot;&gt;

    &lt;rST file=&quot;path/to/file.rst&quot; destination=&quot;path/to/output/file.html&quot; /&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>
    <h4>
        Rendering multiple files
    </h4>
    <p>
        A nested <em>fileset</em>
        tag may be used to specify multiple files.
    </p>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;multiple&quot;&gt;
  &lt;target name=&quot;multiple&quot; description=&quot;renders several rST files&quot;&gt;

    &lt;rST&gt;
     &lt;fileset dir=&quot;.&quot;&gt;
       &lt;include name=&quot;README.rst&quot; /&gt;
       &lt;include name=&quot;docs/*.rst&quot; /&gt;
     &lt;/fileset&gt;
    &lt;/rST&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>
    <h4>
        Rendering multiple files to another directory
    </h4>
    <p>
        A nested <em>mapper</em>
        may be used to determine the output file names.
    </p>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;multiple&quot;&gt;
  &lt;target name=&quot;multiple&quot; description=&quot;renders several rST files&quot;&gt;

    &lt;rST&gt;
     &lt;fileset dir=&quot;.&quot;&gt;
       &lt;include name=&quot;README.rst&quot; /&gt;
       &lt;include name=&quot;docs/*.rst&quot; /&gt;
     &lt;/fileset&gt;
     &lt;mapper type=&quot;glob&quot; from=&quot;*.rst&quot; to=&quot;path/to/my/*.xhtml&quot;/&gt;
    &lt;/rST&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>
    <h4>
        Modifying files after rendering
    </h4>
    <p>You may have variables in your rST code that can be replaced
        after rendering, i.e. the version of your software.</p>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;filterchain&quot;&gt;
  &lt;target name=&quot;filterchain&quot; description=&quot;renders several rST files&quot;&gt;

    &lt;rST&gt;
     &lt;fileset dir=&quot;.&quot;&gt;
       &lt;include name=&quot;README.rst&quot; /&gt;
       &lt;include name=&quot;docs/*.rst&quot; /&gt;
     &lt;/fileset&gt;
     &lt;filterchain&gt;
       &lt;replacetokens begintoken=&quot;##&quot; endtoken=&quot;##&quot;&gt;
         &lt;token key=&quot;VERSION&quot; value=&quot;1.23.0&quot; /&gt;
       &lt;/replacetokens&gt;
     &lt;/filterchain&gt;
    &lt;/rST&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>
    <h4>
        Rendering changed files only
    </h4>
    <p>
        The <em>uptodate</em>
        attribute determines if only those files should be rendered that
        are newer than their output file.
    </p>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;multiple&quot;&gt;
  &lt;target name=&quot;multiple&quot; description=&quot;renders several rST files&quot;&gt;

    &lt;rST uptodate=&quot;true&quot;&gt;
     &lt;fileset dir=&quot;.&quot;&gt;
       &lt;include name=&quot;docs/*.rst&quot; /&gt;
     &lt;/fileset&gt;
    &lt;/rST&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>
    <h4>
        Specify a custom CSS file
    </h4>
    <p>
        You may pass any additional parameters to the rst conversion tools
        with the <em>toolparam</em> attribute.
    </p>
    <pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;example&quot; basedir=&quot;.&quot; default=&quot;single&quot;&gt;
  &lt;target name=&quot;single&quot; description=&quot;render a single rST file to S5 HTML&quot;&gt;

    &lt;rST file=&quot;path/to/file.rst&quot; toolparam=&quot;--stylesheet-path=custom.css&quot; /&gt;

  &lt;/target&gt;
&lt;/project&gt;
</pre>

	<h2>
		<a name="S3PutTask"></a>S3PutTask
	</h2>
	<p>
		Uploads an object to Amazon S3. This task requires the PEAR package <a
			href="http://pear.php.net/package/Services_Amazon_S3"
			title="Services_Amazon_S3" target="_blank">Services_Amazon_S3</a>
	</p>
	<h3>Examples</h3>
	<p>Uploading a file</p>
	<pre>&lt;s3put source=&quot;/path/to/file.txt&quot; object=&quot;file.txt&quot; bucket=&quot;mybucket&quot; key=&quot;AmazonKey&quot; secret=&quot;AmazonSecret&quot; /&gt;</pre>
	<p>You can also define "bucket, key, secret" outside of the task
		call:</p>
	<pre>
&lt;property name=&quot;amazon.key&quot; value=&quot;my_key&quot; /&gt;
&lt;property name=&quot;amazon.secret&quot; value=&quot;my_secret&quot; /&gt;
&lt;property name=&quot;amazon.bucket&quot; value=&quot;mybucket&quot; /&gt;

&lt;s3put source=&quot;/path/to/file.txt&quot; object=&quot;file.txt&quot; /&gt;
	</pre>
	<p>You can also specify inline content instead of a file to upload:</p>
	<pre>
&lt;property name=&quot;amazon.key&quot; value=&quot;my_key&quot; /&gt;
&lt;property name=&quot;amazon.secret&quot; value=&quot;my_secret&quot; /&gt;
&lt;property name=&quot;amazon.bucket&quot; value=&quot;mybucket&quot; /&gt;

&lt;s3put content=&quot;Some content here&quot; object=&quot;file.txt&quot; /&gt;
	</pre>
	<p>It also works with filesets</p>
	<pre>
&lt;property name=&quot;amazon.key&quot; value=&quot;my_key&quot; /&gt;
&lt;property name=&quot;amazon.secret&quot; value=&quot;my_secret&quot; /&gt;
&lt;property name=&quot;amazon.bucket&quot; value=&quot;mybucket&quot; /&gt;
&lt;s3put&gt;
	&lt;fileset dir=&quot;${project.basedir}&quot;&gt;
		&lt;include name=&quot;**/*.jpg&quot; /&gt;
	&lt;/fileset&gt;
&lt;/s3put&gt;	
	</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>key</td>
				<td>String</td>
				<td>Amazon S3 key</td>
				<td>n/a</td>
				<td>Yes (or defined before task call as: amazon.key)</td>
			</tr>
			<tr>
				<td>secret</td>
				<td>String</td>
				<td>Amazon S3 secret</td>
				<td>n/a</td>
				<td>Yes (or defined before task call as: amazon.secret)</td>
			</tr>
			<tr>
				<td>bucket</td>
				<td>String</td>
				<td>Bucket to store the object in</td>
				<td>n/a</td>
				<td>Yes (or defined before task call as: amazon.bucket)</td>
			</tr>
			<tr>
				<td>content</td>
				<td>String</td>
				<td>Content to store in the object</td>
				<td>n/a</td>
				<td>Yes (or source or fileset)</td>
			</tr>
			<tr>
				<td>source</td>
				<td>String</td>
				<td>Where to read content for the object from</td>
				<td>n/a</td>
				<td>Yes (or content or fileset)</td>
			</tr>
			<tr>
				<td>object</td>
				<td>String</td>
				<td>Object name</td>
				<td>n/a</td>
				<td>Yes (unless fileset)</td>
			</tr>
		</tbody>
	</table>

	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>

	<h2>
		<a name="S3GetTask"></a>S3GetTask
	</h2>
	<p>
		Downloads an object from Amazon S3. This task requires the PEAR
		package <a href="http://pear.php.net/package/Services_Amazon_S3"
			title="Services_Amazon_S3" target="_blank">Services_Amazon_S3</a>
	</p>
	<h3>Examples</h3>
	<p>Downloading an object</p>
	<pre>
&lt;s3get object=&quot;file.txt&quot; target=&quot;${project.basedir}&quot; bucket=&quot;mybucket&quot; key=&quot;AmazonKey&quot; secret=&quot;AmazonSecret&quot; /&gt;
			</pre>
	<p>You can also define "bucket, key, secret" outside of the task
		call:</p>
	<pre>
&lt;property name=&quot;amazon.key&quot; value=&quot;my_key&quot; /&gt;
&lt;property name=&quot;amazon.secret&quot; value=&quot;my_secret&quot; /&gt;
&lt;property name=&quot;amazon.bucket&quot; value=&quot;mybucket&quot; /&gt;

&lt;s3get object=&quot;file.txt&quot; target=&quot;${project.basedir}&quot; /&gt;
			</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>key</td>
				<td>String</td>
				<td>Amazon S3 key</td>
				<td>n/a</td>
				<td>Yes (or defined before task call as: amazon.key)</td>
			</tr>
			<tr>
				<td>secret</td>
				<td>String</td>
				<td>Amazon S3 secret</td>
				<td>n/a</td>
				<td>Yes (or defined before task call as: amazon.secret)</td>
			</tr>
			<tr>
				<td>bucket</td>
				<td>String</td>
				<td>Bucket containing the object</td>
				<td>n/a</td>
				<td>Yes (or defined before task call as: amazon.bucket)</td>
			</tr>
			<tr>
				<td>object</td>
				<td>String</td>
				<td>Object name</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>target</td>
				<td>String</td>
				<td>Where to store the object after download</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
		</tbody>
	</table>

	<h2>
		<a name="ScpTask"></a>ScpTask
	</h2>
	<p>
		The <em>ScpTask</em> copies files to and from a remote host using scp.
		This task requires the <a href="http://pecl.php.net/package/ssh2"
			target="_blank">PHP SSH2 extension</a> to function.
	</p>
	<h3>Examples</h3>
	<pre>&lt;scp username=&quot;john&quot; password=&quot;smith&quot;
host=&quot;webserver&quot; fetch=&quot;true&quot;
todir=&quot;/home/john/backup&quot;
file=&quot;/www/htdocs/test.html&quot; /&gt;</pre>
	<p>Fetches a single file from the remote server.</p>

	<pre>&lt;scp username=&quot;john&quot; password=&quot;smith&quot;
host=&quot;webserver&quot;
todir=&quot;/www/htdocs/&quot;
file=&quot;/home/john/dev/test.html&quot; /&gt;</pre>
	<p>Copies a single file to the remote server.</p>

	<pre>&lt;scp username=&quot;john&quot; password=&quot;smith&quot;
host=&quot;webserver&quot; todir=&quot;/www/htdocs/project/&quot;&gt;
    &lt;fileset dir=&quot;test&quot;&gt;
        &lt;include name=&quot;*.html&quot; /&gt;
    &lt;/fileset&gt;
&lt;/scp&gt;</pre>
	<p>Copies multiple files to the remote server.</p>

	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>host</td>
				<td>String</td>
				<td>Remote host</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>port</td>
				<td>Integer</td>
				<td>Remote port</td>
				<td>22</td>
				<td>No</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>Username to use for the connection</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>Password to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>pubkeyfile</td>
				<td>String</td>
				<td>Public key file to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>privkeyfile</td>
				<td>String</td>
				<td>Private key file to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>privkeyfilepassphrase</td>
				<td>String</td>
				<td>Private key file passphrase to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>autocreate</td>
				<td>Boolean</td>
				<td>Whether to autocreate remote directories</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Directory to put file(s) in</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Filename to use</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>fetch</td>
				<td>Boolean</td>
				<td>Whether to fetch (instead of copy to) the file</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>level</td>
				<td>String</td>
				<td>Control the level at which the task reports status
					messages. One of <em>error</em>, <em>warning</em>, <em>info</em>, <em>verbose</em>,
					<em>debug</em>.</td>
				<td><em>verbose</em></td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>

	<h2>
		<a name="SshTask"></a>SshTask
	</h2>
	<p>
		The <em>ScpTask</em> executes commands on a remote host using ssh..
		This task requires the <a href="http://pecl.php.net/package/ssh2"
			target="_blank">PHP SSH2 extension</a> to function.
	</p>
	<h3>Examples</h3>
	<pre>&lt;ssh username=&quot;john&quot; password=&quot;smith&quot;
host=&quot;webserver&quot; command=&quot;ls&quot; /&gt;</pre>
	<p>Executes a single command on the remote server.</p>

	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>host</td>
				<td>String</td>
				<td>Remote host</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>port</td>
				<td>Integer</td>
				<td>Remote port</td>
				<td>22</td>
				<td>No</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>Username to use for the connection</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>Password to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>pubkeyfile</td>
				<td>String</td>
				<td>Public key file to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>privkeyfile</td>
				<td>String</td>
				<td>Private key file to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>privkeyfilepassphrase</td>
				<td>String</td>
				<td>Private key file passphrase to use for the connection</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>command</td>
				<td>String</td>
				<td>Command to execute on the remote server</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>property</td>
				<td>String</td>
				<td>The name of the property to capture (any) output of the
					command</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>display</td>
				<td>Boolean</td>
				<td>Whether to display the output of the command</td>
				<td>true</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>

	<h2>
		<a name="SimpleTestTask"></a>SimpleTestTask
	</h2>
	<p>
		This task runs testcases using the <a
			href="http://www.simpletest.org/" target="_blank">SimpleTest</a>
		framework.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>printsummary</td>
				<td>Boolean</td>
				<td>Print one-line statistics for each testcase.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonerror</td>
				<td>Boolean</td>
				<td>Stop the build process if an error occurs during the test
					run.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonfailure</td>
				<td>Boolean</td>
				<td>Stop the build process if a test fails (errors are
					considered failures as well).</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>failureproperty</td>
				<td>String</td>
				<td>Name of property to set (to true) on failure.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>errorproperty</td>
				<td>String</td>
				<td>Name of property to set (to true) on error.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>debug</td>
				<td>Boolean</td>
				<td>Switch debugging on/off</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>formatter
			<p>
				The results of the tests can be printed in different formats. Output
				will always be sent to a file, unless you set the <em>usefile</em>
				attribute to <em>false</em>. The name of the file is predetermined
				by the formatter and can be changed by the <em>outfile</em>
				attribute.
			</p>
			<p>There are three predefined formatters - one prints the test
				results in XML format, the other emits plain text. The formatter
				named brief will only print detailed information for testcases that
				failed, while plain gives a little statistics line for all test
				cases. Custom formatters that implement
				phing.tasks.ext.PHPUnitResultFormatter can be specified.</p>
			<p>If you use the XML formatter, it may not include the same
				output that your tests have written as some characters are illegal
				in XML documents and will be dropped.</p>
			<h3>Attributes</h3>
			<table>
				<thead>
					<tr>
						<th>Name</th>
						<th>Type</th>
						<th>Description</th>
						<th>Default</th>
						<th>Required</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>type</td>
						<td>String</td>
						<td>Use a predefined formatter (either <em>xml</em>, <em>plain</em>,
							or <em>summary</em>).</td>
						<td>n/a</td>
						<td rowspan="2">One of these is required.</td>
					</tr>
					<tr>
						<td>classname</td>
						<td>String</td>
						<td>Name of a custom formatter class.</td>
						<td>n/a</td>
					</tr>
					<tr>
						<td>usefile</td>
						<td>Boolean</td>
						<td>Boolean that determines whether output should be sent to
							a file.</td>
						<td>true</td>
						<td>No</td>
					</tr>
					<tr>
						<td>todir</td>
						<td>String</td>
						<td>Directory to write the file to.</td>
						<td>n/a</td>
						<td>No</td>
					</tr>
					<tr>
						<td>outfile</td>
						<td>String</td>
						<td>Filename of the result.</td>
						<td>Depends on formatter</td>
						<td>No</td>
					</tr>
				</tbody>
			</table></li>
		<li>fileset</li>
	</ul>
	<h3>Examples</h3>
	<pre>&lt;simpletest&gt;
  &lt;formatter type=&quot;plain&quot;/&gt;
  &lt;fileset dir=&quot;tests&quot;&gt;
    &lt;include name=&quot;**/*Test*.php&quot;/&gt;
    &lt;exclude name=&quot;**/Abstract*.php&quot;/&gt;
  &lt;/fileset&gt;
&lt;/simpletest&gt;
</pre>
	<p>
		Runs all matching testcases in the directory <em>tests</em>, writing
		plain text results to the console.
	</p>
	<pre>&lt;simpletest haltonfailure=&quot;true&quot; haltonerror=&quot;true&quot;&gt;
  &lt;formatter type=&quot;plain&quot; usefile=&quot;false&quot;/&gt;
  &lt;fileset dir=&quot;tests&quot;&gt;
    &lt;include name=&quot;**/*Test*.php&quot;/&gt;
  &lt;/fileset&gt;
&lt;/simpletest&gt;
</pre>
	<p>
		Runs all matching testcases in the directory <em>tests</em>, writing
		plain text results to the console. The build process is aborted if a
		test fails.
	</p>
	<h2>
		<a name="SvnCheckoutTask"></a>SvnCheckoutTask
	</h2>
	<p>
		The <em>SvnCheckoutTask</em> checks out a Subversion repository to a
		local directory.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svncheckout
   svnpath=&quot;/usr/bin/svn&quot;
   username="anony"
   password="anony"
   nocache="true"
   repositoryurl=&quot;svn://localhost/project/trunk/&quot;
   todir=&quot;/home/user/svnwc&quot;/&gt;
</pre>
	<pre>&lt;svncheckout
   svnpath=&quot;C:/Subversion/bin/svn.exe&quot;
   repositoryurl=&quot;svn://localhost/project/trunk/&quot;
   todir=&quot;C:/projects/svnwc&quot;/&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repositoryurl</td>
				<td>String</td>
				<td>URL of SVN repository</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>A username used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>A password used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nocache</td>
				<td>Boolean</td>
				<td>Connection credentials will not be cached</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Path to export to</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>recursive</td>
				<td>Boolean</td>
				<td>Recursive behavior</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignoreexternals</td>
				<td>Boolean</td>
				<td>Ignore externals definitions</td>
				<td>false</td>
				<td>No</td>
			</tr>
            <tr>
                <td>trustServerCert</td>
                <td>Boolean</td>
                <td>Trust self-signed certificates</td>
                <td>False</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>

	<h2>
		<a name="SvnCommitTask"></a>SvnCommitTask
	</h2>
	<p>
		The <em>SvnCommitTask</em> commits a local working copy to a SVN
		repository and sets the specified property ( default <em>svn.committedrevision</em>)
		to the revision number of the committed revision.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svncommit
    svnpath=&quot;/usr/bin/svn&quot;
    username="anony"
    password="anony"
    nocache="true"
    workingcopy="/home/joe/dev/project"    
    message="Updated documentation, fixed typos" /&gt;
</pre>
	<p>The most basic usage only needs the working copy and the commit
		message as in</p>
	<pre>&lt;svncommit
    workingcopy="/home/joe/dev/project"
    message="Updated documentation, fixed typos" /&gt;
&lt;echo message="Committed revision: ${svn.committedrevision}"/&gt;    
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>A username used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>A password used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nocache</td>
				<td>Boolean</td>
				<td>Connection credentials will not be cached</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>recursive</td>
				<td>Boolean</td>
				<td>Recurse into all subdirectories</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>workingcopy</td>
				<td>String</td>
				<td>Working copy</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>message</td>
				<td>String</td>
				<td>The commit message</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>ignoreexternals</td>
				<td>Boolean</td>
				<td>Ignore externals definitions</td>
				<td>false</td>
				<td>No</td>
			</tr>
            <tr>
                <td>trustServerCert</td>
                <td>Boolean</td>
                <td>Trust self-signed certificates</td>
                <td>False</td>
                <td>No</td>
            </tr>
			<tr>
				<td>propertyname</td>
				<td>String</td>
				<td>Name of property to set to the last committed revision
					number</td>
				<td>svn.committedrevision</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>

	<h2>
		<a name="SvnCopyTask"></a>SvnCopyTask
	</h2>
	<p>
		The <em>SvnCopyTask</em> duplicates something in a working copy or
		repository, remembering history.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svncopy
   svnpath=&quot;/usr/bin/svn&quot;
   username="anony"
   password="anony"
   force="true"
   nocache="true"
   repositoryurl=&quot;svn://localhost/project/trunk/&quot;
   todir=&quot;svn://localhost/project/tags/0.1&quot;/&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>message</td>
				<td>String</td>
				<td>Log message</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repositoryurl</td>
				<td>String</td>
				<td>URL of SVN repository</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>A username used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>A password used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>Force overwrite files if they already exist</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nocache</td>
				<td>Boolean</td>
				<td>Connection credentials will not be cached</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Path to export to</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>recursive</td>
				<td>Boolean</td>
				<td>Recursive behavior</td>
				<td>True</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignoreexternals</td>
				<td>Boolean</td>
				<td>Ignore externals definitions</td>
				<td>False</td>
				<td>No</td>
			</tr>
            <tr>
                <td>trustServerCert</td>
                <td>Boolean</td>
                <td>Trust self-signed certificates</td>
                <td>False</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>

	<h2>
		<a name="SvnExportTask"></a>SvnExportTask
	</h2>
	<p>
		The <em>SvnExportTask</em> exports a Subversion repository to a local
		directory.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svnexport
   svnpath=&quot;/usr/bin/svn&quot;
   username="anony"
   password="anony"
   force="true"
   nocache="true"
   repositoryurl=&quot;svn://localhost/project/trunk/&quot;
   todir=&quot;/home/user/svnwc&quot;/&gt;
</pre>
	<pre>&lt;svnexport
   svnpath=&quot;C:/Subversion/bin/svn.exe&quot;
   repositoryurl=&quot;svn://localhost/project/trunk/&quot;
   todir=&quot;C:/projects/svnwc&quot;/&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>revision</td>
				<td>String</td>
				<td>Revision to use in export</td>
				<td>HEAD</td>
				<td>No</td>
			</tr>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repositoryurl</td>
				<td>String</td>
				<td>URL of SVN repository</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>A username used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>A password used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>force</td>
				<td>Boolean</td>
				<td>Force overwrite files if they already exist</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nocache</td>
				<td>Boolean</td>
				<td>Connection credentials will not be cached</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Path to export to</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>recursive</td>
				<td>Boolean</td>
				<td>Recursive behavior</td>
				<td>True</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignoreexternals</td>
				<td>Boolean</td>
				<td>Ignore externals definitions</td>
				<td>False</td>
				<td>No</td>
			</tr>
            <tr>
                <td>trustServerCert</td>
                <td>Boolean</td>
                <td>Trust self-signed certificates</td>
                <td>False</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>

	<h2>
		<a name="SvnLastRevisionTask"></a>SvnLastRevisionTask
	</h2>
	<p>
		The <em>SvnLastRevisionTask</em> stores the number of the last
		revision of a Subversion workingcopy in a property.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svnlastrevision
   svnpath=&quot;/usr/bin/svn&quot;
   workingcopy=&quot;/home/user/svnwc&quot;
   propertyname=&quot;svn.lastrevision&quot;/&gt;
</pre>
	<pre>&lt;svnlastrevision
   svnpath=&quot;C:/Subversion/bin/svn.exe&quot;
   workingcopy=&quot;C:/projects/svnwc&quot;
   propertyname=&quot;svn.lastrevision&quot;/&gt;
</pre>
	<pre>&lt;svnlastrevision
   svnpath=&quot;C:/Subversion/bin/svn.exe&quot;
   repositoryurl=&quot;http://svn.phing.info/&quot;
   propertyname=&quot;svn.lastrevision&quot;/&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>workingcopy</td>
				<td>String</td>
				<td>Working copy directory</td>
				<td>none</td>
				<td>Yes, or <em>repositoryurl</em></td>
			</tr>
			<tr>
				<td>repositoryurl</td>
				<td>String</td>
				<td>URL of remote repository</td>
				<td>none</td>
				<td>Yes, or <em>workingcopy</em></td>
			</tr>
			<tr>
				<td>propertyname</td>
				<td>String</td>
				<td>Name of property to use</td>
				<td>svn.lastrevision</td>
				<td>No</td>
			</tr>
			<tr>
				<td>lastChanged</td>
				<td>Boolean</td>
				<td>Sets whether to store actual last changed revision of the
					directory/file mentioned</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>forceCompatible</td>
				<td>Boolean</td>
				<td>Sets whether to force compatibility with older SVN versions
					(&lt; 1.2)</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>

	<h2>
		<a name="SvnListTask"></a> SvnListTask
	</h2>
	<p>
		The <em>SvnListTask</em> stores the output of a svn list command on a
		workingcopy or repositoryurl in a property.
	</p>
	<p>
		Currently it always uses the <em>forceCompatiple</em> mode so the
		supplied attribute is ignored. It uses svn's --verbose switch to get
		additional data about the listed items. The result will be stored in
		an array, one string that is seperated by ' | ' (in words: space pipe
		space) for easy parsing.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svnlist svnpath="/usr/bin/svn" workingcopy="/home/user/svnwc" propertyname="svn.list"/&gt; </pre>
	<pre>&lt;svnlist svnpath="/usr/bin/svn" repositoryurl="http://svn.example.com/myrepo/tags" orderDescending="true" limit="10" /&gt; </pre>
	<p>The latter example could produce a list of your tags like this:</p>
	<pre>
revision | author | date         | item
4028     | tony   | May 19 18:31 | Release_2.9.1.7
4026     | tony   | May 18 14:33 | Release_2.9.1.6
4023     | tony   | May 16 15:53 | Release_2.9.1.5
4018     | tony   | May 13 11:55 | Release_2.9.1.4
4005     | tony   | Apr 27 12:09 | Release_2.9.1.3
...
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>workingcopy</td>
				<td>String</td>
				<td>Working copy directory</td>
				<td>none</td>
				<td rowspan="2">One of the two</td>
			</tr>
			<tr>
				<td>repositoryurl</td>
				<td>String</td>
				<td>URL of remote repository</td>
				<td>none</td>
			</tr>
			<tr>
				<td>propertyname</td>
				<td>String</td>
				<td>Name of property to use</td>
				<td>svn.list</td>
				<td>No</td>
			</tr>
			<tr>
				<td>forceCompatible</td>
				<td>Boolean</td>
				<td>Sets whether to force compatibility with older SVN versions
					(&lt; 1.2)</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>limit</td>
				<td>Integer</td>
				<td>Limits the number of items to get back from the command</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>orderDescending</td>
				<td>Boolean</td>
				<td>Sets whether to reverse the order of the listed items</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>

	<h2>
		<a name="SvnLogTask"></a> SvnLogTask
	</h2>
	<p>
		The <em>SvnLogTask</em> stores the output of a svn log command on a
		workingcopy or repositoryurl in a property.
	</p>
	<p>
		Currently it always uses the <em>forceCompatiple</em> mode so the
		supplied attribute is ignored. The result will be stored in an array,
		one string that is seperated by ' | ' (in words: space pipe space) for
		easy parsing.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svnlog svnpath="/usr/bin/svn" workingcopy="/home/user/svnwc" propertyname="svn.log"/&gt; </pre>
	<pre>&lt;svnlog svnpath="/usr/bin/svn" repositoryurl="http://svn.example.com/myrepo/trunk" limit="10" /&gt; </pre>
	<p>The latter example could produce a history of the latest
		revisions in the trunk:</p>
	<pre>
4033 | tony  | 2011-05-23T14:21:12.496274Z  | some svn commit comment
4032 | tony  | 2011-05-23T13:24:46.496265Z  | some svn commit comment
4031 | tony  | 2011-05-23T09:23:28.093167Z  | some svn commit comment
...
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>workingcopy</td>
				<td>String</td>
				<td>Working copy directory</td>
				<td>none</td>
				<td rowspan="2">One of the two</td>
			</tr>
			<tr>
				<td>repositoryurl</td>
				<td>String</td>
				<td>URL of remote repository</td>
				<td>none</td>
			</tr>
			<tr>
				<td>propertyname</td>
				<td>String</td>
				<td>Name of property to use</td>
				<td>svn.list</td>
				<td>No</td>
			</tr>
			<tr>
				<td>forceCompatible</td>
				<td>Boolean</td>
				<td>Sets whether to force compatibility with older SVN versions
					(&lt; 1.2)</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>limit</td>
				<td>Integer</td>
				<td>Limits the number of items to get back from the command</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>


	<h2>
		<a name="SvnUpdateTask"></a>SvnUpdateTask
	</h2>
	<p>
		The <em>SvnUpdateTask</em> updates a local directory.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svnupdate
   svnpath=&quot;/usr/bin/svn&quot;
   username="anony"
   password="anony"
   nocache="true"
   todir=&quot;/home/user/svnwc&quot;/&gt;
</pre>
	<pre>&lt;svnupdate
   svnpath=&quot;C:/Subversion/bin/svn.exe&quot;
   todir=&quot;C:/projects/svnwc&quot;/&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>A username used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>A password used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nocache</td>
				<td>Boolean</td>
				<td>Connection credentials will not be cached</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Path to the working copy</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>revision</td>
				<td>Integer</td>
				<td>Specific revision to update the working copy to</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignoreexternals</td>
				<td>Boolean</td>
				<td>Ignore externals definitions</td>
				<td>False</td>
				<td>No</td>
			</tr>
            <tr>
                <td>trustServerCert</td>
                <td>Boolean</td>
                <td>Trust self-signed certificates</td>
                <td>False</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>
	<h2>
		<a name="SvnSwitchTask"></a>SvnSwitchTask
	</h2>
	<p>
		The <em>SvnSwitchTask</em> changes a local directory from one
		repository to another.
	</p>
	<h3>Examples</h3>
	<pre>&lt;svnswitch
   svnpath=&quot;/usr/bin/svn&quot;
   username="anony"
   password="anony"
   nocache="true"
   repositoryurl=&quot;http://svn.phing.info/tags/2.4.2&quot;
   todir=&quot;/home/user/svnwc&quot;/&gt;
</pre>
	<pre>&lt;svnswitch
   svnpath=&quot;C:/Subversion/bin/svn.exe&quot;
   repositoryurl=&quot;http://svn.phing.info/tags/2.4.2&quot;
   todir=&quot;C:/projects/svnwc&quot;/&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>svnpath</td>
				<td>String</td>
				<td>Path to Subversion binary</td>
				<td>/usr/bin/svn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>repositoryurl</td>
				<td>String</td>
				<td>URL of remote repository</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Path to the checked out project</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>username</td>
				<td>String</td>
				<td>A username used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>password</td>
				<td>String</td>
				<td>A password used to connect to the SVN server</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>nocache</td>
				<td>Boolean</td>
				<td>Connection credentials will not be cached</td>
				<td>False</td>
				<td>No</td>
			</tr>
			<tr>
				<td>recursive</td>
				<td>Boolean</td>
				<td>Recursive behavior</td>
				<td>True</td>
				<td>No</td>
			</tr>
			<tr>
				<td>ignoreexternals</td>
				<td>Boolean</td>
				<td>Ignore externals definitions</td>
				<td>False</td>
				<td>No</td>
			</tr>
            <tr>
                <td>trustServerCert</td>
                <td>Boolean</td>
                <td>Trust self-signed certificates</td>
                <td>False</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>

	<h2>
		<a name="SymlinkTask"></a>SymlinkTask
	</h2>
	<p>Creates symlink(s) to a specified file / directory or a
		collection of files / directories.</p>
	<h3>Examples</h3>
	<p>Single symlink</p>
	<pre>&lt;symlink target=&quot;/path/to/original/file&quot; link=&quot;/where/to/symlink&quot; /&gt;</pre>
	<p>Using filesets</p>
	<pre>
&lt;symlink link=&quot;/where/to/symlink&quot;&gt;
	&lt;fileset dir=&quot;/some/directory&quot;&gt;
		&lt;include name=&quot;*&quot; /&gt;
	&lt;/fileset&gt;
&lt;/symlink&gt;
	</pre>
	<p>In the fileset example, assuming the contents of
		"/some/directory" were:</p>
	<ul>
		<li>Somedir</li>
		<li>somefile</li>
	</ul>
	<p>Then the contents of "/where/to/symlink" would be:</p>
	<ul>
		<li>Somedir -&gt; /some/directory/Somedir</li>
		<li>somefile -&gt; /some/directory/somefile</li>
	</ul>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>target</td>
				<td>String</td>
				<td>What you're trying to symlink from</td>
				<td>n/a</td>
				<td>Yes (or nested FileSet)</td>
			</tr>
			<tr>
				<td>link</td>
				<td>String</td>
				<td>Where you'd like the symlink(s)</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>overwrite</td>
				<td>Boolean</td>
				<td>Whether to override the symlink if it exists but points 
				to a different location</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>

	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>

	<h2>
		<a name="TarTask"></a>TarTask
	</h2>
	<p>
		The <em>TarTask</em> creates a tarball from a fileset or directory.
	</p>
	<h3>Examples</h3>
	<pre>&lt;tar destfile=&quot;phing.tar&quot; compression=&quot;gzip&quot;&gt;
 &lt;fileset dir=&quot;.&quot;&gt;
	 &lt;include name=&quot;**/**&quot; /&gt;
 &lt;/fileset&gt;
&lt;/tar&gt;
</pre>
	<p>The above example uses a fileset to determine which files to
		include in the archive.</p>
	<pre>&lt;tar destfile=&quot;phing.tar&quot; basedir=&quot;.&quot; compression=&quot;gzip&quot;/&gt;</pre>
	<p>The second example uses the basedir attribute to include the
		contents of that directory (including subdirectories) in the archive.</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>destfile</td>
				<td>String</td>
				<td>Tarball filename</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>basedir</td>
				<td>String</td>
				<td>Base directory to tar (if no fileset specified, entire
					directory contents will be included in tar)</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>compression</td>
				<td>String</td>
				<td>Type of compression to use (gzip, bzip2, none)</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>includeemptydirs</td>
				<td>Boolean</td>
				<td>If set to <em>true</em>, also empty directories are copied.
				</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>longfile</td>
				<td>String</td>
				<td>How to handle long files, those with a path &gt; 100 chars.
					Allowable values are:
					<ul>
						<li>truncate - paths are truncated to the maximum length</li>
						<li>fail - paths greater than the maximim cause a build
							exception</li>
						<li>warn - paths greater than the maximum cause a warning and
							GNU is used</li>
						<li>gnu - GNU extensions are used for any paths greater than
							the maximum</li>
						<li>omit - paths greater than the maximum are omitted from
							the archive</li>
					</ul></td>
				<td>warn</td>
				<td>No</td>
			</tr>
			<tr>
				<td>prefix</td>
				<td>String</td>
				<td>File path prefix to use when adding files to archive</td>
				<td>none</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<p>
		<b>Important note #1:</b> files are not replaced if they are already
		present in the archive.
	</p>
	<p>
		<b>Important note #2:</b> using basedir and fileset simultaneously can
		result in strange contents in the archive.
	</p>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h2>
		<a name="UntarTask"></a> UntarTask
	</h2>
	<p>
		The <em>UntarTask</em> unpacks one or more tar archives.
	</p>
	<h3>Examples</h3>
	<pre>&lt;untar file=&quot;testtar.tar.gz&quot; todir=&quot;dest&quot;&gt;
  &lt;fileset dir=&quot;.&quot;&gt;
    &lt;include name=&quot;*.tar.gz&quot;/&gt;
    &lt;include name=&quot;*.tar&quot;/&gt;
  &lt;/fileset&gt;
&lt;/untar&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Archive filename</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Directory to unpack the archive(s) to</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
            <tr>
                <td>removepath</td>
                <td>String</td>
                <td>Path to remove from files in the archive(s)</td>
                <td>none</td>
                <td>No</td>
            </tr>
            <tr>
                <td>forceExtract</td>
                <td>Boolean</td>
                <td>When set to false, only extract files if the destination does not exist yet or is older than the archive.
                When set to true, always extract files.</td>
                <td>false</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h2>
		<a name="UnzipTask"></a>UnzipTask
	</h2>
	<p>
		The <em>UnzipTask</em> unpacks one or more ZIP archives.
	</p>
	<h3>Examples</h3>
	<pre>&lt;unzip file=&quot;testzip.zip&quot; todir=&quot;dest&quot;&gt;
  &lt;fileset dir=&quot;.&quot;&gt;
    &lt;include name=&quot;*.zip&quot;/&gt;
  &lt;/fileset&gt;
&lt;/unzip&gt;
</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Archive filename</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>todir</td>
				<td>String</td>
				<td>Directory to unpack the archive(s) to</td>
				<td>none</td>
				<td>Yes</td>
			</tr>
            <tr>
                <td>forceExtract</td>
                <td>Boolean</td>
                <td>When set to false, only extract files if the destination does not exist yet or is older than the archive.
                When set to true, always extract files.</td>
                <td>false</td>
                <td>No</td>
            </tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h2>
		<a name="VersionTask"></a>VersionTask
	</h2>
	<p>
		The <em>VersionTask</em> increments a three-part version number from a
		given file and writes it back to the file. The resulting version
		number is also published under supplied property.
	</p>
	<p>The version number in the text file is expected in the format of
		Major.Minor.Bugfix (e.g. 1.3.2).</p>
	<h3>Examples</h3>
	<pre>&lt;version releasetype=&quot;Major&quot; file=&quot;version.txt&quot; property=&quot;version.number&quot;/&gt;</pre>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>releasetype</td>
				<td>String</td>
				<td>Specifies desired version release (Major, Minor or Bugfix)</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>File containing three-part version number to increment</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>property</td>
				<td>String</td>
				<td>Property which contains the resulting version number</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
		</tbody>
	</table>
	<h2>
		<a name="XmlLintTask"></a>XmlLintTask
	</h2>
	<p>
		The <em>XmlLintTask</em> checks syntax (lint) one or more XML files
		against an XML Schema Definition.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>schema</td>
				<td>String</td>
				<td>Path to XSD file</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Path to XML file</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonfailure</td>
				<td>Boolean</td>
				<td>Stops the build when validation fails</td>
				<td>true</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;xmllint schema=&quot;schema.xsd&quot; file=&quot;config.xml&quot;/&gt;
</pre>
	<p>Validate one XML file against one XSD file.</p>
	<pre>
&lt;xmllint schema=&quot;schema.xsd&quot;&gt;
&nbsp;&nbsp;&lt;fileset dir=&quot;.&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/config.xml"/&gt;
&nbsp;&nbsp;&lt;/fileset&gt;
&lt;/xmllint&gt;
</pre>
	<p>Validate more XML files against one XSD file.</p>
	<h2>
		<a name="XmlPropertyTask"></a>XmlPropertyTask
	</h2>
	<p>Loads property values from a well-formed xml file. There are no
		other restrictions than "well-formed".</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>The XML file to parse.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>prefix</td>
				<td>String</td>
				<td>The prefix to prepend to each property</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>keepRoot</td>
				<td>Boolean</td>
				<td>Keep the xml root tag as the first value in the property
					name.</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>collapseAttributes</td>
				<td>Boolean</td>
				<td>Treat attributes as nested elements.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>delimiter</td>
				<td>String</td>
				<td>Delimiter for splitting multiple values.</td>
				<td>,</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Example</h3>
	<p>Consider the following XML file:</p>
	<pre>
&lt;root-tag myattr="true"&gt;
    &lt;inner-tag someattr="val"&gt;Text&lt;/inner-tag&gt;
    &lt;a2&gt;&lt;a3&gt;&lt;a4&gt;false&lt;/a4&gt;&lt;/a3&gt;&lt;/a2&gt;
&lt;/root-tag&gt;</pre>
	<p>
		Used with the the following entry (<b>default</b>):
	</p>
	<pre>
&lt;xmlproperty file=&quot;somefile.xml&quot;/&gt;
</pre>
	<p>results in the following properties:</p>
	<pre>
root-tag(myattr)=true
root-tag.inner-tag=Text
root-tag.inner-tag(someattr)=val
root-tag.a2.a3.a4=false</pre>
	<p>
		Used with the the following entry (<b>collapseAttributes=true</b>):
	</p>
	<pre>
&lt;xmlproperty file=&quot;somefile.xml&quot; collapseAttributes=&quot;true&quot;/&gt;
</pre>
	<p>results in the following properties:</p>
	<pre>
root-tag.myattr=true
root-tag.inner-tag=Text
root-tag.inner-tag.someatt=val
root-tag.a2.a3.a4=false</pre>
	<p>
		Used with the the following entry (<b>keepRoot=false</b>):
	</p>
	<pre>
&lt;xmlproperty file=&quot;somefile.xml&quot; keepRoot=&quot;false&quot;/&gt;
</pre>
	<p>results in the following properties:</p>
	<pre>
inner-tag=Text
inner-tag(someattr)=val
a2.a3.a4=false</pre>
	<h2>
		<a name="ZendCodeAnalyzerTask"></a>ZendCodeAnalyzerTask
	</h2>
	<p>
		The <em>ZendCodeAnalyzerTask</em> analyze PHP source files using the
		Zend Code Analyzer tool that ships with all versions of Zend Studio.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>analyzerPath</td>
				<td>String</td>
				<td>Path to Zend Code Analyzer binary</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>file</td>
				<td>String</td>
				<td>Path to PHP source file</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>disable</td>
				<td>String</td>
				<td>Disable warnings seperated by comma</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>enable</td>
				<td>String</td>
				<td>Enable warnings separated by comma</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>haltonwarning</td>
				<td>Boolean</td>
				<td>Stop the build process if warnings occurred during the run.
				</td>
				<td>false</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h3>Example</h3>
	<pre>
&lt;zendcodeanalyzer analyzerPath=&quot;/usr/local/Zend/ZendStudioClient-5.1.0/bin/ZendCodeAnalyzer&quot; file=&quot;SomeClass.php&quot;/&gt;
</pre>
	<p>Analyze one PHP source file with all default warnings enabled.</p>
	<pre>
&lt;zendcodeanalyzer analyzerPath=&quot;/usr/local/Zend/ZendStudioClient-5.1.0/bin/ZendCodeAnalyzer&quot; disable=&quot;var-ref-notmodified,if-if-else&quot;&gt;
&nbsp;&nbsp;&lt;fileset dir=&quot;.&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*.php"/&gt;
&nbsp;&nbsp;&lt;/fileset&gt;
&lt;/zendcodeanalyzer&gt;
</pre>
	<p>Analyze a set of PHP source files and disable a few warnings.</p>
	<p>
		<b>NOTE:</b> the <em>analyze</em> tag has been deprecated as of Phing
		2.4.
	</p>

	<h2>
		<a name="ZendGuardEncodeTask"></a>ZendGuardEncodeTask
	</h2>
	<p>
		The <em>ZendGuardEncodeTask</em> is a wrapper for ZendGuard zendenc
		executable. It pre-compiles the PHP code which improves speed and can
		prevent unauthorized code modification. Additionally it allows signing
		or licensing the code so it can only be used with a valid
		license.&nbsp;
	</p>
	<p>
		For more information about ZendGuard encode parameters see the <a
			href="http://static.zend.com/topics/Zend-Guard-User-Guidev5x.pdf">ZendGuard
			documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>zendEncoderPath</td>
				<td>String</td>
				<td>Path to &nbsp;zendenc or zendenc5 binary.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>deleteSource</td>
				<td>Boolean</td>
				<td>Whether to delete the original file and replace with
					encoded.</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>renameSourceExt</td>
				<td>String</td>
				<td>If defined the original file will be &nbsp;copied to
					originalfile.renameSourceExt before encoding. This property
					overrides &nbsp;the deleteSource property.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>shortTags</td>
				<td>Boolean</td>
				<td>Turns on/off support for PHP short tags (&lt;?). True to
					enable support.</td>
				<td>true</td>
				<td>No</td>
			</tr>
			<tr>
				<td>aspTags</td>
				<td>Boolean</td>
				<td>Turns on/off support for ASP tags (&lt;%). True to enable
					support.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>noHeader</td>
				<td>Boolean</td>
				<td>Disables the PHP-compatible header that is added to the top
					of every encoded file by default and is displayed if the Zend
					Optimizer is not properly installed.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>useCrypto</td>
				<td>Boolean</td>
				<td>Enables cryptography support.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>encodedOnly</td>
				<td>Boolean</td>
				<td>If enabled the encoded files will only work with other
					encoded files ( I.e. encoded and not-encoded files cannot be used
					together).</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>forceEncode</td>
				<td>Boolean</td>
				<td>Allow encoding previously encoded files. Not recommended.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>expires</td>
				<td>String</td>
				<td>Make an encoded file to expire on the given data. Date is
					in yyyy-mm-dd format.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>obfuscationLevel</td>
				<td>Integer</td>
				<td>Level of obfuscation. Defaults to 0 (no obfuscation).&nbsp;</td>
				<td>0</td>
				<td>No</td>
			</tr>
			<tr>
				<td>optMask</td>
				<td>Integer</td>
				<td>Optimization mask. Integer representing a bit mask.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>privateKeyPath</td>
				<td>String</td>
				<td>Path to the company private key. This is required when
					either signProduct or licenseProduct is enabled.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>licenseProduct</td>
				<td>Boolean</td>
				<td>Enabled product licensing. The encoded files won't work
					without a valid license. If enabled privateKeyPath property also
					needs to be defined.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>signProduct</td>
				<td>Boolean</td>
				<td>Enabled product signing. If signing is enabled the files
					will be encoded with license support. However valid license won't
					be required for the files to work. If enabled privatKeyPath
					property also needs to be defined.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>productName</td>
				<td>String</td>
				<td>Name of the product. This must match the product name in
					the license and is required when either licenseProduct or
					signProduct is enabled.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>prologFile</td>
				<td>String</td>
				<td>Path to a file containing a text that will be prepended to
					each encoded file and displayed in case the Zend Optimizer is not
					installed.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
	<h3>Example</h3>
	<pre>&lt;zendguardencode<br /> shortTags="false"<br /> productName="Phing"<br /> privateKeyPath="/var/data/phing.key"<br /> licenseProduct="true"<br /> zendEncoderPath="/usr/local/Zend/ZendGuard-5_0_1/bin/zendenc5"<br /> &gt;<br /><br /> &lt;fileset dir="src"&gt;<br /> &lt;include name="**/*.php" /&gt;<br /> &lt;exclude name="cache/**" /&gt;<br /> &lt;exclude name="plugins/**" /&gt;<br /> &lt;/fileset&gt;<br /> <br /> &lt;fileset dir="src"&gt;<br /> &lt;include name="plugins/cs*/**/*.php" /&gt;<br /> &lt;include name="plugins/cs*/*.php" /&gt;<br /> &lt;/fileset&gt;<br />&lt;/zendguardencode&gt;<br />
	</pre>
	<p>Encode all php files in the current directory and
		subdirectories. Exlude everything in cache/ and plugins/ but include
		everything in plugins that starts with cs.</p>
	<p></p>
	<h2>
		<a name="ZendGuardLicenseTask"></a>ZendGuardLicenseTask
	</h2>
	<p>
		The <em>ZendGuardLicenseTask</em> is a wrapper for ZendGuard
		zendenc_sign executable. &nbsp;It generates ZendGuard license either
		from a license template file or from the defined properties.
	</p>
	<p>
		For more information about ZendGuard sign parameters see the <a
			href="http://static.zend.com/topics/Zend-Guard-User-Guidev5x.pdf">ZendGuard
			documentation</a>.
	</p>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>zendsignPath</td>
				<td>String</td>
				<td>Path to &nbsp;zendenc_sign binary.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>privateKeyPath</td>
				<td>String</td>
				<td>Path to the company private key.&nbsp;</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>outputFile</td>
				<td>String</td>
				<td>Path where should the license be generated.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>licenseTemplate</td>
				<td>String</td>
				<td>Path to a license template file. If &nbsp;defined all other
					licensing properties will be ignored (even if they are otherwise
					required).</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>productName</td>
				<td>String</td>
				<td>Name of the product. This has to match the product name
					that was used to encode the files (see ZendGuardEncodeTask).</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>registeredTo</td>
				<td>String</td>
				<td>Name to which the product will be registered to.</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>expires</td>
				<td>Mixed</td>
				<td>This allows to define when the license will expire.
					&nbsp;The license can be issued so it either never expires or
					expires at a specified data. <br /> Use:<br />
					<ul>
						<li>&nbsp;'Never', 0 or false to set expiry data to Never.</li>
						<li>Date in yyyy-mm-dd format to set the expiry date to a
							specific date.</li>
						<li>Relative format supported by strtotime function (e.g. '+6
							months' to generate a license that will expire in half a year).</li>
					</ul>
				</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>ipRange</td>
				<td>String</td>
				<td>Limits the use of the license to IP addresses that fall
					within specification. Supports wildcards for any of the IP place
					holders, as well as the two types of the net masks (e.g.
					10.1.0.0/16 or 10.1.0.0./255.255.0.0).</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>hardwareLocked</td>
				<td>Boolean</td>
				<td>Option that indicates if the license will be locked to a
					specific machine using the Zend Host ID code(s). If set to true the
					Host-ID property is required.</td>
				<td>false</td>
				<td>No</td>
			</tr>
			<tr>
				<td>hostID</td>
				<td>String</td>
				<td>Coded string (Zend Host ID) used to lock the license to a
					specific hardware. The Zend Host Id obtained from the machine where
					the encoded files and license are to be installed. Can be obtained
					by using the zendid utility.<br /> <br /> This is REQUIRED if the
					Hardware-Locked property is set to true. You can define multiple
					Host IDs separated by semicolon.</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>userDefinedValues</td>
				<td>String</td>
				<td>Optional user defined values in format key=value. Multiple
					key-value pairs can be defined and separated by semicolon. These
					values then will be part of the license and can be obtained using
					the zend guard api (provided by Zend Optimizer). These values
					CANNOT be modified after the license is generated. Their
					modification would invalidate the license.<br /> Example:
					&nbsp;Drink=Tea;Material=Wood</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
			<tr>
				<td>xUserDefinedValues</td>
				<td>String</td>
				<td>Optional user defined values in format key=value. Multiple
					key-value pairs can be defined and separated by semicolon. These
					values then will be part of the license and can be obtained using
					the zend guard api (provided by Zend Optimizer). These values CAN
					be modified after the license is generated. Their modification
					won't invalidate the license.<br /> Example:
					&nbsp;Drink=Tea;Material=Wood</td>
				<td>n/a</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<br />
	<span style="font-weight: bold;">Examples</span>
	<pre>&lt;zendguardlicense<br />            privateKeyPath="/var/data/phing.key"<br />            zendsignPath="/usr/local/Zend/ZendGuard-5_0_1/bin/zendenc_sign"<br />            outputFile="./data/license/license.zl"<br />            productName="Phing"<br />            registeredTo="YourCustomerName"<br />            hardwareLocked="true"<br />            expires="+6 months"<br />            HostID="H:MFM43-Q9CXC-B9EDX-GWYSU;H:MFM43-Q9CXC-B9EDX-GWYTY"<br />            ipRange="10.1.*.*"<br />            userDefinedValues="Drink=Tea;Material=Wood"<br />            xUserDefinedValues="Drink=Tea;Material=Wood"<br />/&gt;<br />
	</pre>
	<p>Creates a license using the given properties.</p>
	<pre>&lt;zendguardlicense<br />            privateKeyPath="/var/data/phing.key"<br />            zendsignPath="/usr/local/Zend/ZendGuard-5_0_1/bin/zendenc_sign"<br />            outputFile="./data/license/license.zl"<br />            licenseTemplate="./data/license/license.template.zl"<br />/&gt;<br />
	</pre>
	<p>Creates a license using a license template file.</p>
	<p></p>


	<h2>
		<a name="ZipTask"></a>ZipTask
	</h2>
	<p>
		The <em>ZipTask</em> creates a .zip archive from a fileset or
		directory.
	</p>
	<h3>Examples</h3>
	<pre>&lt;zip destfile=&quot;phing.zip&quot;&gt;
 &lt;fileset dir=&quot;.&quot;&gt;
	 &lt;include name=&quot;**/**&quot; /&gt;
 &lt;/fileset&gt;
&lt;/zip&gt;
</pre>
	<p>The above example uses a fileset to determine which files to
		include in the archive.</p>
	<pre>&lt;zip destfile=&quot;phing.zip&quot; basedir=&quot;.&quot;/&gt;</pre>
	<p>The second example uses the basedir attribute to include the
		contents of that directory (including subdirectories) in the archive.</p>
	<h3>Example</h3>
	<h3>Attributes</h3>
	<table>
		<thead>
			<tr>
				<th>Name</th>
				<th>Type</th>
				<th>Description</th>
				<th>Default</th>
				<th>Required</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>destfile</td>
				<td>String</td>
				<td>.ZIP filename</td>
				<td>n/a</td>
				<td>Yes</td>
			</tr>
			<tr>
				<td>basedir</td>
				<td>String</td>
				<td>Base directory to zip (if no fileset specified, entire
					directory contents will be included in the archive)</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>prefix</td>
				<td>String</td>
				<td>File path prefix to use when adding files to zip</td>
				<td>none</td>
				<td>No</td>
			</tr>
			<tr>
				<td>includeemptydirs</td>
				<td>Boolean</td>
				<td>If set to <em>true</em>, also empty directories are copied.
				</td>
				<td>true</td>
				<td>No</td>
			</tr>
		</tbody>
	</table>
	<p>
		<b>Important note:</b> using basedir and fileset simultaneously can
		result in strange contents in the archive.
	</p>
	<h3>Supported Nested Tags</h3>
	<ul>
		<li>fileset</li>
	</ul>
</body>
</html>
